Files
hello-algo/ja/codes/rust/chapter_tree/binary_tree_bfs.rs
T
Yudong Jin 7257641e0e Retranslate the complete Japanese online edition from Chinese (#2008)
* Retranslate the complete Japanese online edition from Chinese

* Fit Japanese homepage labels and localize heading permalinks

* Point Japanese contribution instructions to the Japanese preview

* Replace locale conditionals with multilingual UI tables
2026-10-30 02:12:26 +08:00

46 lines
1.5 KiB
Rust

/*
* File: binary_tree_bfs.rs
* Created Time: 2023-04-07
* Author: xBLACKICEx ([email protected])
*/
use hello_algo_rust::include::{print_util, vec_to_tree, TreeNode};
use hello_algo_rust::op_vec;
use std::collections::VecDeque;
use std::{cell::RefCell, rc::Rc};
/* レベル順走査 */
fn level_order(root: &Rc<RefCell<TreeNode>>) -> Vec<i32> {
// キューを初期化し、根ノードを追加する
let mut que = VecDeque::new();
que.push_back(root.clone());
// 走査順序を保存するリストを初期化する
let mut vec = Vec::new();
while let Some(node) = que.pop_front() {
// キューからデキューする
vec.push(node.borrow().val); // ノードの値を保存する
if let Some(left) = node.borrow().left.as_ref() {
que.push_back(left.clone()); // 左の子ノードをエンキューする
}
if let Some(right) = node.borrow().right.as_ref() {
que.push_back(right.clone()); // 右の子ノードをエンキューする
};
}
vec
}
/* 実行用コード */
fn main() {
/* 二分木を初期化する */
// ここでは配列から二分木を直接生成する関数を使う
let root = vec_to_tree(op_vec![1, 2, 3, 4, 5, 6, 7]).unwrap();
println!("二分木を初期化する\n");
print_util::print_tree(&root);
/* レベル順走査 */
let vec = level_order(&root);
print!("\nレベル順走査で表示するノードの順序 = {:?}", vec);
}