Skip to content

Commit 3f90a76

Browse files
committed
feat: add python and java solutions to lcof problem
添加《剑指 Offer》题解:面试题32 - III. 从上到下打印二叉树 III
1 parent a77207c commit 3f90a76

File tree

3 files changed

+204
-0
lines changed

3 files changed

+204
-0
lines changed
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
# [面试题32 - III. 从上到下打印二叉树 III](https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-iii-lcof/)
2+
3+
## 题目描述
4+
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
5+
6+
**例如:**
7+
8+
给定二叉树: `[3,9,20,null,null,15,7]`,
9+
10+
```
11+
3
12+
/ \
13+
9 20
14+
/ \
15+
15 7
16+
```
17+
18+
返回其层次遍历结果:
19+
20+
```
21+
[
22+
[3],
23+
[20,9],
24+
[15,7]
25+
]
26+
```
27+
28+
**提示:**
29+
30+
- `节点总数 <= 1000`
31+
32+
## 解法
33+
### Python3
34+
```python
35+
# Definition for a binary tree node.
36+
# class TreeNode:
37+
# def __init__(self, x):
38+
# self.val = x
39+
# self.left = None
40+
# self.right = None
41+
42+
from queue import Queue
43+
44+
class Solution:
45+
def levelOrder(self, root: TreeNode) -> List[List[int]]:
46+
if root is None:
47+
return []
48+
q = Queue()
49+
q.put(root)
50+
cnt = 1
51+
res = []
52+
level = 0
53+
while not q.empty():
54+
level += 1
55+
t = []
56+
num = 0
57+
for _ in range(cnt):
58+
node = q.get()
59+
t.append(node.val)
60+
if node.left:
61+
q.put(node.left)
62+
num += 1
63+
if node.right:
64+
q.put(node.right)
65+
num += 1
66+
if (level & 1) == 0:
67+
t.reverse()
68+
res.append(t)
69+
cnt = num
70+
return res
71+
```
72+
73+
### Java
74+
```java
75+
/**
76+
* Definition for a binary tree node.
77+
* public class TreeNode {
78+
* int val;
79+
* TreeNode left;
80+
* TreeNode right;
81+
* TreeNode(int x) { val = x; }
82+
* }
83+
*/
84+
class Solution {
85+
public List<List<Integer>> levelOrder(TreeNode root) {
86+
if (root == null) {
87+
return new ArrayList<>();
88+
}
89+
Queue<TreeNode> q = new LinkedList<>();
90+
q.offer(root);
91+
int cnt = 1;
92+
int level = 0;
93+
List<List<Integer>> res = new ArrayList<>();
94+
while (!q.isEmpty()) {
95+
++level;
96+
int num = 0;
97+
List<Integer> t = new ArrayList<>();
98+
while (cnt-- > 0) {
99+
TreeNode node = q.poll();
100+
t.add(node.val);
101+
if (node.left != null) {
102+
q.offer(node.left);
103+
++num;
104+
}
105+
if (node.right != null) {
106+
q.offer(node.right);
107+
++num;
108+
}
109+
}
110+
if ((level & 1) == 0) {
111+
Collections.reverse(t);
112+
}
113+
res.add(t);
114+
cnt = num;
115+
}
116+
return res;
117+
}
118+
}
119+
```
120+
121+
### ...
122+
```
123+
124+
```
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* public class TreeNode {
4+
* int val;
5+
* TreeNode left;
6+
* TreeNode right;
7+
* TreeNode(int x) { val = x; }
8+
* }
9+
*/
10+
class Solution {
11+
public List<List<Integer>> levelOrder(TreeNode root) {
12+
if (root == null) {
13+
return new ArrayList<>();
14+
}
15+
Queue<TreeNode> q = new LinkedList<>();
16+
q.offer(root);
17+
int cnt = 1;
18+
int level = 0;
19+
List<List<Integer>> res = new ArrayList<>();
20+
while (!q.isEmpty()) {
21+
++level;
22+
int num = 0;
23+
List<Integer> t = new ArrayList<>();
24+
while (cnt-- > 0) {
25+
TreeNode node = q.poll();
26+
t.add(node.val);
27+
if (node.left != null) {
28+
q.offer(node.left);
29+
++num;
30+
}
31+
if (node.right != null) {
32+
q.offer(node.right);
33+
++num;
34+
}
35+
}
36+
if ((level & 1) == 0) {
37+
Collections.reverse(t);
38+
}
39+
res.add(t);
40+
cnt = num;
41+
}
42+
return res;
43+
}
44+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# Definition for a binary tree node.
2+
# class TreeNode:
3+
# def __init__(self, x):
4+
# self.val = x
5+
# self.left = None
6+
# self.right = None
7+
8+
from queue import Queue
9+
10+
class Solution:
11+
def levelOrder(self, root: TreeNode) -> List[List[int]]:
12+
if root is None:
13+
return []
14+
q = Queue()
15+
q.put(root)
16+
cnt = 1
17+
res = []
18+
level = 0
19+
while not q.empty():
20+
level += 1
21+
t = []
22+
num = 0
23+
for _ in range(cnt):
24+
node = q.get()
25+
t.append(node.val)
26+
if node.left:
27+
q.put(node.left)
28+
num += 1
29+
if node.right:
30+
q.put(node.right)
31+
num += 1
32+
if (level & 1) == 0:
33+
t.reverse()
34+
res.append(t)
35+
cnt = num
36+
return res

0 commit comments

Comments
 (0)