楼主:
yam276 ('_')
2025-07-01 16:31:48199. Binary Tree Right Side View
题目:
求一棵树的每一层最右边节点
思路:
这题是 BFS
你会建立一个 queue 储存每一层元素
每次都是一层 之后会把原本的都拿出来取他们的左右子节点
因此每次建完一层之后每次取最后一个东西凑成 Vec 就好了
Code:
use std::collections::VecDeque;
use std::rc::Rc;
use std::cell::RefCell;
impl Solution {
pub fn right_side_view(root: Option<Rc<RefCell<TreeNode>>>) -> Vec<i32> {
let mut queue = VecDeque::new();
let mut result = Vec::new();
if let Some(node) = root {
queue.push_back(node);
}
while !queue.is_empty() {
let level_size = queue.len();
for i in 0..level_size {
if let Some(node) = queue.pop_front() {
let mut n_borrow = node.borrow_mut();
if let Some(left) = n_borrow.left.take() {
queue.push_back(left);
}
if let Some(right) = n_borrow.right.take() {
queue.push_back(right);
}
if i == level_size - 1 {
result.push(n_borrow.val);
}
}
}
}
result
}
}