Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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‎

Lines changed: 98 additions & 0 deletions
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
```
Lines changed: 53 additions & 0 deletions
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+
}
Lines changed: 36 additions & 0 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /