Skip to content

Commit d7fe3b3

Browse files
committed
feat: add solutions to lcof problem: No.32 - |
面试题 32 - II. 从上到下打印二叉树 II
1 parent 3ddae76 commit d7fe3b3

File tree

3 files changed

+176
-0
lines changed

3 files changed

+176
-0
lines changed

lcof/面试题32 - II. 从上到下打印二叉树 II/README.md

+93
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,99 @@ public:
192192
};
193193
```
194194
195+
### **TypeScript**
196+
197+
```ts
198+
/**
199+
* Definition for a binary tree node.
200+
* class TreeNode {
201+
* val: number
202+
* left: TreeNode | null
203+
* right: TreeNode | null
204+
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
205+
* this.val = (val===undefined ? 0 : val)
206+
* this.left = (left===undefined ? null : left)
207+
* this.right = (right===undefined ? null : right)
208+
* }
209+
* }
210+
*/
211+
212+
function levelOrder(root: TreeNode | null): number[][] {
213+
const res = [];
214+
if (root == null) {
215+
return res;
216+
}
217+
const levelFn = (nodes: TreeNode[]) => {
218+
if (nodes.length === 0) {
219+
return res;
220+
}
221+
const nextNodes = [];
222+
res.push(
223+
nodes.map(({ val, left, right }) => {
224+
left && nextNodes.push(left);
225+
right && nextNodes.push(right);
226+
return val;
227+
})
228+
);
229+
return levelFn(nextNodes);
230+
};
231+
return levelFn([root]);
232+
}
233+
```
234+
235+
### **Rust**
236+
237+
```rust
238+
// Definition for a binary tree node.
239+
// #[derive(Debug, PartialEq, Eq)]
240+
// pub struct TreeNode {
241+
// pub val: i32,
242+
// pub left: Option<Rc<RefCell<TreeNode>>>,
243+
// pub right: Option<Rc<RefCell<TreeNode>>>,
244+
// }
245+
//
246+
// impl TreeNode {
247+
// #[inline]
248+
// pub fn new(val: i32) -> Self {
249+
// TreeNode {
250+
// val,
251+
// left: None,
252+
// right: None
253+
// }
254+
// }
255+
// }
256+
use std::rc::Rc;
257+
use std::cell::RefCell;
258+
use std::collections::VecDeque;
259+
260+
impl Solution {
261+
pub fn level_order(root: Option<Rc<RefCell<TreeNode>>>) -> Vec<Vec<i32>> {
262+
let mut res = Vec::new();
263+
if root.is_none() {
264+
return res;
265+
}
266+
let mut nodes = VecDeque::new();
267+
nodes.push_back(root.unwrap());
268+
while !nodes.is_empty() {
269+
let mut values = Vec::new();
270+
for _ in 0..nodes.len() {
271+
let node = nodes.pop_front().unwrap();
272+
let mut node = node.borrow_mut();
273+
values.push(node.val);
274+
if node.left.is_some() {
275+
nodes.push_back(node.left.take().unwrap())
276+
}
277+
if node.right.is_some() {
278+
nodes.push_back(node.right.take().unwrap())
279+
}
280+
}
281+
res.push(values);
282+
}
283+
res
284+
}
285+
}
286+
```
287+
195288
### **...**
196289

197290
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
// Definition for a binary tree node.
2+
// #[derive(Debug, PartialEq, Eq)]
3+
// pub struct TreeNode {
4+
// pub val: i32,
5+
// pub left: Option<Rc<RefCell<TreeNode>>>,
6+
// pub right: Option<Rc<RefCell<TreeNode>>>,
7+
// }
8+
//
9+
// impl TreeNode {
10+
// #[inline]
11+
// pub fn new(val: i32) -> Self {
12+
// TreeNode {
13+
// val,
14+
// left: None,
15+
// right: None
16+
// }
17+
// }
18+
// }
19+
use std::rc::Rc;
20+
use std::cell::RefCell;
21+
use std::collections::VecDeque;
22+
23+
impl Solution {
24+
pub fn level_order(root: Option<Rc<RefCell<TreeNode>>>) -> Vec<Vec<i32>> {
25+
let mut res = Vec::new();
26+
if root.is_none() {
27+
return res;
28+
}
29+
let mut nodes = VecDeque::new();
30+
nodes.push_back(root.unwrap());
31+
while !nodes.is_empty() {
32+
let mut values = Vec::new();
33+
for _ in 0..nodes.len() {
34+
let node = nodes.pop_front().unwrap();
35+
let mut node = node.borrow_mut();
36+
values.push(node.val);
37+
if node.left.is_some() {
38+
nodes.push_back(node.left.take().unwrap())
39+
}
40+
if node.right.is_some() {
41+
nodes.push_back(node.right.take().unwrap())
42+
}
43+
}
44+
res.push(values);
45+
}
46+
res
47+
}
48+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* class TreeNode {
4+
* val: number
5+
* left: TreeNode | null
6+
* right: TreeNode | null
7+
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
8+
* this.val = (val===undefined ? 0 : val)
9+
* this.left = (left===undefined ? null : left)
10+
* this.right = (right===undefined ? null : right)
11+
* }
12+
* }
13+
*/
14+
15+
function levelOrder(root: TreeNode | null): number[][] {
16+
const res = [];
17+
if (root == null) {
18+
return res;
19+
}
20+
const levelFn = (nodes: TreeNode[]) => {
21+
if (nodes.length === 0) {
22+
return res;
23+
}
24+
const nextNodes = [];
25+
res.push(
26+
nodes.map(({ val, left, right }) => {
27+
left && nextNodes.push(left);
28+
right && nextNodes.push(right);
29+
return val;
30+
})
31+
);
32+
return levelFn(nextNodes);
33+
};
34+
return levelFn([root]);
35+
}

0 commit comments

Comments
 (0)