From f2978f143102031ca4081778e016f13af651f6ad Mon Sep 17 00:00:00 2001 From: jackfiled Date: Sat, 15 Jun 2024 11:09:07 +0800 Subject: [PATCH] 20240615 Finished --- src/problem/mod.rs | 3 +- .../p199_binary_tree_right_side_view.rs | 73 +++++++++++++++++++ 2 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 src/problem/p199_binary_tree_right_side_view.rs diff --git a/src/problem/mod.rs b/src/problem/mod.rs index 396b8e9..1930b57 100644 --- a/src/problem/mod.rs +++ b/src/problem/mod.rs @@ -148,4 +148,5 @@ mod p112_path_sum; mod p129_sum_root_to_leaf_numbers; mod p124_binary_tree_maximum_path_sum; mod p173_binary_search_tree_iterator; -mod p222_count_complete_tree_nodes; \ No newline at end of file +mod p222_count_complete_tree_nodes; +mod p199_binary_tree_right_side_view; \ No newline at end of file diff --git a/src/problem/p199_binary_tree_right_side_view.rs b/src/problem/p199_binary_tree_right_side_view.rs new file mode 100644 index 0000000..e168e87 --- /dev/null +++ b/src/problem/p199_binary_tree_right_side_view.rs @@ -0,0 +1,73 @@ +/** + * [199] Binary Tree Right Side View + */ +pub struct Solution {} + +use crate::util::tree::{TreeNode, to_tree}; + +// submission codes start here + +// Definition for a binary tree node. +// #[derive(Debug, PartialEq, Eq)] +// pub struct TreeNode { +// pub val: i32, +// pub left: Option>>, +// pub right: Option>>, +// } +// +// impl TreeNode { +// #[inline] +// pub fn new(val: i32) -> Self { +// TreeNode { +// val, +// left: None, +// right: None +// } +// } +// } +use std::rc::Rc; +use std::cell::RefCell; +use std::collections::VecDeque; +impl Solution { + pub fn right_side_view(root: Option>>) -> Vec { + let mut result = vec![]; + let mut queue = VecDeque::new(); + + if let Some(root) = root { + queue.push_back(root); + } + + while !queue.is_empty() { + let length = queue.len(); + + for i in 0..length { + let node = queue.pop_front().unwrap(); + + if i == length - 1 { + result.push(node.borrow().val); + } + + if let Some(left) = &node.borrow().left { + queue.push_back(Rc::clone(left)); + }; + + if let Some(right) = &node.borrow().right { + queue.push_back(Rc::clone(right)); + }; + } + } + + result + } +} + +// submission codes end + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_199() { + } +}