作者yam276 (史萊哲林的優等生)
標題[閒聊] 每日leetcode 75 - Day21
時間2025-07-01 16:31:48
199. 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
}
}
--
※ 發信站: 批踢踢實業坊(www.ptt.org.tw), 來自: 60.248.143.163 (臺灣)
※ 文章網址: https://www.ptt.org.tw/Marginalman/M.1751358710.A.3C9