提交 86008616 编写于 作者: 梦境迷离's avatar 梦境迷离

rust leetcode interview 32-2

上级 cf1be800
......@@ -1180,4 +1180,44 @@ impl Solution {
start
}
}
```
* 面试题32 - II. 从上到下打印二叉树 II
```rust
impl Solution {
//leetcode 102
pub fn level_order(root: Option<Rc<RefCell<TreeNode>>>) -> Vec<Vec<i32>> {
let mut ret = Vec::new();
let mut nodes = VecDeque::new();
let mut row = Vec::new();
let mut flag = root.clone();
nodes.push_back(root.clone());
while !nodes.is_empty() {
let tmp = nodes.pop_front();
if let Some(node) = tmp {
if let Some(n) = node {
row.push(n.try_borrow().unwrap().val);
if n.try_borrow().unwrap().left.is_some() {
nodes.push_back(n.try_borrow().unwrap().left.clone());
}
if n.try_borrow().unwrap().right.is_some() {
nodes.push_back(n.try_borrow().unwrap().right.clone());
}
if let Some(f) = flag.borrow() {
if f.as_ptr() == n.as_ptr() {
//直接back导致as_ptr不等
let tail = nodes.pop_back();
if tail.is_some() {
flag = tail.clone().unwrap();
nodes.push_back(tail.unwrap());
}
ret.push(row);
row = Vec::new();
}
}
}
}
}
ret
}
}
```
\ No newline at end of file
......@@ -1600,6 +1600,65 @@ fn leetcode_1413() {
println!("{}", ret)
}
///从上到下打印二叉树 II
fn interview_32_2() {
println!("interview_32_2");
use std::rc::Rc;
use std::cell::RefCell;
impl Solution {
//leetcode 102
pub fn level_order(root: Option<Rc<RefCell<TreeNode>>>) -> Vec<Vec<i32>> {
let mut ret = Vec::new();
let mut nodes = VecDeque::new();
let mut row = Vec::new();
let mut flag = root.clone();
nodes.push_back(root.clone());
while !nodes.is_empty() {
let tmp = nodes.pop_front();
if let Some(node) = tmp {
if let Some(n) = node {
row.push(n.try_borrow().unwrap().val);
if n.try_borrow().unwrap().left.is_some() {
nodes.push_back(n.try_borrow().unwrap().left.clone());
}
if n.try_borrow().unwrap().right.is_some() {
nodes.push_back(n.try_borrow().unwrap().right.clone());
}
if let Some(f) = flag.borrow() {
if f.as_ptr() == n.as_ptr() {
//直接back导致as_ptr不等
let tail = nodes.pop_back();
if tail.is_some() {
flag = tail.clone().unwrap();
nodes.push_back(tail.unwrap());
}
ret.push(row);
row = Vec::new();
}
}
}
}
}
ret
}
}
let e7 = Some(Rc::new(RefCell::new(TreeNode { val: 7, left: None, right: None })));
let e15 = Some(Rc::new(RefCell::new(TreeNode { val: 15, left: None, right: None })));
let e20 = Some(Rc::new(RefCell::new(TreeNode { val: 20, left: e15, right: e7 })));
let e9 = Some(Rc::new(RefCell::new(TreeNode { val: 9, left: None, right: None })));
let e3 = Some(Rc::new(RefCell::new(TreeNode { val: 3, left: e9, right: e20 })));
// let e2 = Some(Rc::new(RefCell::new(TreeNode { val: 2, left: None, right: None })));
// let e1 = Some(Rc::new(RefCell::new(TreeNode { val: 1, left: e2, right: None })));
let ret = Solution::level_order(e3);
for v in ret.iter() {
for c in v.iter() {
print!("{}", c)
}
println!("\n")
}
}
///所有方法调用
pub fn solutions() {
interview_58_2();
......@@ -1651,6 +1710,7 @@ pub fn solutions() {
leetcode_292();
leetcode_1160();
leetcode_1413();
interview_32_2();
}
fn print_vec(nums: Vec<i32>) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册