Skip to content

Commit 31f0021

Browse files
committed
update 102
1 parent afd39ea commit 31f0021

File tree

2 files changed

+113
-1
lines changed

2 files changed

+113
-1
lines changed

note/102/README.md

+48-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ return its level order traversal as:
2525
]
2626
```
2727

28-
## 思路
28+
## 思路一
2929

3030
使用一个队列。先压入根节点和一个空白节点,然后依次弹出节点:
3131
* 如果节点不为空,把当前值加到列表,然后把节点的左右孩子节点压入队列尾部(如果孩子节点不为空)
@@ -76,5 +76,52 @@ class Solution {
7676
}
7777
```
7878

79+
## 思路二
80+
81+
在思路一的基础上进行优化。思路一通过往队列里添加空白节点作为每一层的分隔。
82+
其实当前队列的长度就是该层节点的个数,通过 for 循环往队列里压入下一层节点。
83+
84+
## [完整代码][src2]
85+
86+
```java
87+
/**
88+
* Definition for a binary tree node.
89+
* public class TreeNode {
90+
* int val;
91+
* TreeNode left;
92+
* TreeNode right;
93+
* TreeNode(int x) { val = x; }
94+
* }
95+
*/
96+
class Solution {
97+
public List<List<Integer>> levelOrder(TreeNode root) {
98+
List<List<Integer>> list = new ArrayList<>();
99+
if (root == null) return list;
100+
101+
Queue<TreeNode> queue = new LinkedList<TreeNode>();
102+
queue.offer(root);
103+
104+
while (!queue.isEmpty()) {
105+
List<Integer> temp = new ArrayList<>();
106+
int size = queue.size();
107+
for (int i = 0; i < size; i++) {
108+
TreeNode node = queue.peek();
109+
if (node.left != null) {
110+
queue.offer(node.left);
111+
}
112+
if (node.right != null) {
113+
queue.offer(node.right);
114+
}
115+
temp.add(queue.poll().val);
116+
}
117+
list.add(temp);
118+
}
119+
120+
return list;
121+
}
122+
}
123+
```
124+
79125
[title]: https://leetcode.com/problems/binary-tree-level-order-traversal
80126
[src]: https://github.com/andavid/leetcode-java/blob/master/src/com/andavid/leetcode/_102/Solution.java
127+
[src2]: https://github.com/andavid/leetcode-java/blob/master/src/com/andavid/leetcode/_102/Solution2.java
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import java.util.*;
2+
3+
class Solution2 {
4+
5+
public List<List<Integer>> levelOrder(TreeNode root) {
6+
List<List<Integer>> list = new ArrayList<>();
7+
if (root == null) return list;
8+
9+
Queue<TreeNode> queue = new LinkedList<TreeNode>();
10+
queue.offer(root);
11+
12+
while (!queue.isEmpty()) {
13+
List<Integer> temp = new ArrayList<>();
14+
int size = queue.size();
15+
for (int i = 0; i < size; i++) {
16+
TreeNode node = queue.peek();
17+
if (node.left != null) {
18+
queue.offer(node.left);
19+
}
20+
if (node.right != null) {
21+
queue.offer(node.right);
22+
}
23+
temp.add(queue.poll().val);
24+
}
25+
list.add(temp);
26+
}
27+
28+
return list;
29+
}
30+
31+
public static class TreeNode {
32+
int val;
33+
TreeNode left;
34+
TreeNode right;
35+
TreeNode(int x) {
36+
val = x;
37+
}
38+
}
39+
40+
public static void main(String[] args) {
41+
TreeNode root = new TreeNode(3);
42+
TreeNode node1 = new TreeNode(9);
43+
TreeNode node2 = new TreeNode(20);
44+
TreeNode node3 = new TreeNode(15);
45+
TreeNode node4 = new TreeNode(7);
46+
root.left = node1;
47+
root.right = node2;
48+
node1.left = node1.right = null;
49+
node2.left = node3;
50+
node2.right = node4;
51+
node3.left = node3.right = null;
52+
node4.left = node4.right = null;
53+
54+
Solution solution = new Solution();
55+
List<List<Integer>> list = solution.levelOrder(root);
56+
for (int i = 0; i < list.size(); i++) {
57+
List<Integer> level = list.get(i);
58+
for (int val : level) {
59+
System.out.print(val + " ");
60+
}
61+
System.out.println("");
62+
}
63+
}
64+
65+
}

0 commit comments

Comments
 (0)