Skip to content

Commit 24fd64a

Browse files
committed
feat: add solutions to lcof problem: No.32 - |||
面试题 32 - III. 从上到下打印二叉树 III
1 parent 68b2b6b commit 24fd64a

File tree

3 files changed

+187
-0
lines changed

3 files changed

+187
-0
lines changed

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

+98
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,104 @@ public:
209209
};
210210
```
211211
212+
### **TypeScript**
213+
214+
```ts
215+
/**
216+
* Definition for a binary tree node.
217+
* class TreeNode {
218+
* val: number
219+
* left: TreeNode | null
220+
* right: TreeNode | null
221+
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
222+
* this.val = (val===undefined ? 0 : val)
223+
* this.left = (left===undefined ? null : left)
224+
* this.right = (right===undefined ? null : right)
225+
* }
226+
* }
227+
*/
228+
229+
function levelOrder(root: TreeNode | null): number[][] {
230+
const res = [];
231+
if (root == null) {
232+
return res;
233+
}
234+
let isEven = false;
235+
const levelFn = (nodes: TreeNode[]) => {
236+
if (nodes.length === 0) {
237+
return res;
238+
}
239+
const nextNodes = [];
240+
const values = nodes.map(({ val, left, right }) => {
241+
left && nextNodes.push(left);
242+
right && nextNodes.push(right);
243+
return val;
244+
});
245+
res.push(isEven ? values.reverse() : values);
246+
isEven = !isEven;
247+
return levelFn(nextNodes);
248+
};
249+
return levelFn([root]);
250+
}
251+
```
252+
253+
### **Rust**
254+
255+
```rust
256+
// Definition for a binary tree node.
257+
// #[derive(Debug, PartialEq, Eq)]
258+
// pub struct TreeNode {
259+
// pub val: i32,
260+
// pub left: Option<Rc<RefCell<TreeNode>>>,
261+
// pub right: Option<Rc<RefCell<TreeNode>>>,
262+
// }
263+
//
264+
// impl TreeNode {
265+
// #[inline]
266+
// pub fn new(val: i32) -> Self {
267+
// TreeNode {
268+
// val,
269+
// left: None,
270+
// right: None
271+
// }
272+
// }
273+
// }
274+
use std::rc::Rc;
275+
use std::cell::RefCell;
276+
use std::collections::VecDeque;
277+
278+
impl Solution {
279+
pub fn level_order(root: Option<Rc<RefCell<TreeNode>>>) -> Vec<Vec<i32>> {
280+
let mut res = Vec::new();
281+
if root.is_none() {
282+
return res;
283+
}
284+
let mut nodes = VecDeque::new();
285+
nodes.push_back(root.unwrap());
286+
let mut is_even = false;
287+
while !nodes.is_empty() {
288+
let mut values = Vec::new();
289+
for _ in 0..nodes.len() {
290+
let node = nodes.pop_front().unwrap();
291+
let mut node = node.borrow_mut();
292+
values.push(node.val);
293+
if node.left.is_some() {
294+
nodes.push_back(node.left.take().unwrap())
295+
}
296+
if node.right.is_some() {
297+
nodes.push_back(node.right.take().unwrap())
298+
}
299+
}
300+
if is_even {
301+
values.reverse()
302+
}
303+
res.push(values);
304+
is_even = !is_even
305+
}
306+
res
307+
}
308+
}
309+
```
212310
### **...**
213311

214312
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
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+
let mut is_even = false;
32+
while !nodes.is_empty() {
33+
let mut values = Vec::new();
34+
for _ in 0..nodes.len() {
35+
let node = nodes.pop_front().unwrap();
36+
let mut node = node.borrow_mut();
37+
values.push(node.val);
38+
if node.left.is_some() {
39+
nodes.push_back(node.left.take().unwrap())
40+
}
41+
if node.right.is_some() {
42+
nodes.push_back(node.right.take().unwrap())
43+
}
44+
}
45+
if is_even {
46+
values.reverse()
47+
}
48+
res.push(values);
49+
is_even = !is_even
50+
}
51+
res
52+
}
53+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
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+
let isEven = false;
21+
const levelFn = (nodes: TreeNode[]) => {
22+
if (nodes.length === 0) {
23+
return res;
24+
}
25+
const nextNodes = [];
26+
const values = nodes.map(({ val, left, right }) => {
27+
left && nextNodes.push(left);
28+
right && nextNodes.push(right);
29+
return val;
30+
});
31+
res.push(isEven ? values.reverse() : values);
32+
isEven = !isEven;
33+
return levelFn(nextNodes);
34+
};
35+
return levelFn([root]);
36+
}

0 commit comments

Comments
 (0)