Skip to content

Commit 1367cfa

Browse files
committed
feat: add solutions to leetcode problem: No.0102
See https://leetcode-cn.com/problems/binary-tree-level-order-traversal/
1 parent d2d30cc commit 1367cfa

File tree

6 files changed

+218
-51
lines changed

6 files changed

+218
-51
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@
8484
### 二叉树
8585

8686
1. [对称二叉树](/solution/0100-0199/0101.Symmetric%20Tree/README.md)
87+
1. [二叉树的层次遍历](/solution/0100-0199/0102.Binary%20Tree%20Level%20Order%20Traversal/README.md)
8788
1. [二叉树的最大深度](/solution/0100-0199/0104.Maximum%20Depth%20of%20Binary%20Tree/README.md)
8889
1. [二叉树的最近公共祖先](/solution/0200-0299/0235.Lowest%20Common%20Ancestor%20of%20a%20Binary%20Search%20Tree/README.md)
8990
1. [二叉搜索树的最近公共祖先](/solution/0200-0299/0236.Lowest%20Common%20Ancestor%20of%20a%20Binary%20Tree/README.md)

README_EN.md

+1
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ Complete solutions to [LeetCode](https://leetcode-cn.com/problemset/all/), [LCOF
8282
### Binary Tree
8383

8484
1. [Symmetric Tree](/solution/0100-0199/0101.Symmetric%20Tree/README_EN.md)
85+
1. [Binary Tree Level Order Traversal](/solution/0100-0199/0102.Binary%20Tree%20Level%20Order%20Traversal/README_EN.md)
8586
1. [Maximum Depth of Binary Tree](/solution/0100-0199/0104.Maximum%20Depth%20of%20Binary%20Tree/README_EN.md)
8687
1. [Lowest Common Ancestor of a Binary Tree](/solution/0200-0299/0236.Lowest%20Common%20Ancestor%20of%20a%20Binary%20Tree/README_EN.md)
8788
1. [Lowest Common Ancestor of a Binary Search Tree](/solution/0200-0299/0235.Lowest%20Common%20Ancestor%20of%20a%20Binary%20Search%20Tree/README_EN.md)

solution/0100-0199/0102.Binary Tree Level Order Traversal/README.md

+90-1
Original file line numberDiff line numberDiff line change
@@ -30,22 +30,111 @@
3030

3131
<!-- 这里可写通用的实现逻辑 -->
3232

33+
队列实现。
34+
3335
<!-- tabs:start -->
3436

3537
### **Python3**
3638

3739
<!-- 这里可写当前语言的特殊实现逻辑 -->
3840

3941
```python
40-
42+
# Definition for a binary tree node.
43+
# class TreeNode:
44+
# def __init__(self, x):
45+
# self.val = x
46+
# self.left = None
47+
# self.right = None
48+
49+
class Solution:
50+
def levelOrder(self, root: TreeNode) -> List[List[int]]:
51+
if root is None:
52+
return []
53+
res = []
54+
q = []
55+
q.append(root)
56+
while q:
57+
size = len(q)
58+
t = []
59+
for _ in range(size):
60+
node = q.pop(0)
61+
if node.left is not None:
62+
q.append(node.left)
63+
if node.right is not None:
64+
q.append(node.right)
65+
t.append(node.val)
66+
res.append(t)
67+
return res
4168
```
4269

4370
### **Java**
4471

4572
<!-- 这里可写当前语言的特殊实现逻辑 -->
4673

4774
```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) return Collections.emptyList();
87+
Deque<TreeNode> q = new ArrayDeque<>();
88+
q.offer(root);
89+
List<List<Integer>> res = new ArrayList<>();
90+
while (!q.isEmpty()) {
91+
int size = q.size();
92+
List<Integer> t = new ArrayList<>();
93+
while (size-- > 0) {
94+
TreeNode node = q.poll();
95+
t.add(node.val);
96+
if (node.left != null) q.offer(node.left);
97+
if (node.right != null) q.offer(node.right);
98+
}
99+
res.add(t);
100+
}
101+
return res;
102+
}
103+
}
104+
```
48105

106+
### **C++**
107+
108+
```cpp
109+
/**
110+
* Definition for a binary tree node.
111+
* struct TreeNode {
112+
* int val;
113+
* TreeNode *left;
114+
* TreeNode *right;
115+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
116+
* };
117+
*/
118+
class Solution {
119+
public:
120+
vector<vector<int>> levelOrder(TreeNode* root) {
121+
if (!root) return {};
122+
vector<vector<int>> res;
123+
queue<TreeNode*> q{{root}};
124+
while (!q.empty()) {
125+
vector<int> oneLevel;
126+
for (int i = q.size(); i > 0; --i) {
127+
TreeNode* t = q.front();
128+
q.pop();
129+
oneLevel.push_back(t->val);
130+
if (t->left) q.push(t->left);
131+
if (t->right) q.push(t->right);
132+
}
133+
res.push_back(oneLevel);
134+
}
135+
return res;
136+
}
137+
};
49138
```
50139
51140
### **...**

solution/0100-0199/0102.Binary Tree Level Order Traversal/README_EN.md

+88-1
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,100 @@ return its level order traversal as:<br />
5555
### **Python3**
5656

5757
```python
58-
58+
# Definition for a binary tree node.
59+
# class TreeNode:
60+
# def __init__(self, x):
61+
# self.val = x
62+
# self.left = None
63+
# self.right = None
64+
65+
class Solution:
66+
def levelOrder(self, root: TreeNode) -> List[List[int]]:
67+
if root is None:
68+
return []
69+
res = []
70+
q = []
71+
q.append(root)
72+
while q:
73+
size = len(q)
74+
t = []
75+
for _ in range(size):
76+
node = q.pop(0)
77+
if node.left is not None:
78+
q.append(node.left)
79+
if node.right is not None:
80+
q.append(node.right)
81+
t.append(node.val)
82+
res.append(t)
83+
return res
5984
```
6085

6186
### **Java**
6287

6388
```java
89+
/**
90+
* Definition for a binary tree node.
91+
* public class TreeNode {
92+
* int val;
93+
* TreeNode left;
94+
* TreeNode right;
95+
* TreeNode(int x) { val = x; }
96+
* }
97+
*/
98+
class Solution {
99+
public List<List<Integer>> levelOrder(TreeNode root) {
100+
if (root == null) return Collections.emptyList();
101+
Deque<TreeNode> q = new ArrayDeque<>();
102+
q.offer(root);
103+
List<List<Integer>> res = new ArrayList<>();
104+
while (!q.isEmpty()) {
105+
int size = q.size();
106+
List<Integer> t = new ArrayList<>();
107+
while (size-- > 0) {
108+
TreeNode node = q.poll();
109+
t.add(node.val);
110+
if (node.left != null) q.offer(node.left);
111+
if (node.right != null) q.offer(node.right);
112+
}
113+
res.add(t);
114+
}
115+
return res;
116+
}
117+
}
118+
```
64119

120+
### **C++**
121+
122+
```cpp
123+
/**
124+
* Definition for a binary tree node.
125+
* struct TreeNode {
126+
* int val;
127+
* TreeNode *left;
128+
* TreeNode *right;
129+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
130+
* };
131+
*/
132+
class Solution {
133+
public:
134+
vector<vector<int>> levelOrder(TreeNode* root) {
135+
if (!root) return {};
136+
vector<vector<int>> res;
137+
queue<TreeNode*> q{{root}};
138+
while (!q.empty()) {
139+
vector<int> oneLevel;
140+
for (int i = q.size(); i > 0; --i) {
141+
TreeNode* t = q.front();
142+
q.pop();
143+
oneLevel.push_back(t->val);
144+
if (t->left) q.push(t->left);
145+
if (t->right) q.push(t->right);
146+
}
147+
res.push_back(oneLevel);
148+
}
149+
return res;
150+
}
151+
};
65152
```
66153
67154
### **...**
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,29 @@
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+
*/
110
class Solution {
211
public List<List<Integer>> levelOrder(TreeNode root) {
12+
if (root == null) return Collections.emptyList();
13+
Deque<TreeNode> q = new ArrayDeque<>();
14+
q.offer(root);
315
List<List<Integer>> res = new ArrayList<>();
4-
if (root == null) {
5-
return res;
6-
}
7-
8-
Queue<TreeNode> queue = new LinkedList<>();
9-
queue.offer(root);
10-
while (!queue.isEmpty()) {
11-
int size = queue.size();
12-
List<Integer> list = new ArrayList<>();
13-
while ((size--) > 0) {
14-
TreeNode node = queue.poll();
15-
list.add(node.val);
16-
if (node.left != null) {
17-
queue.offer(node.left);
18-
}
19-
if (node.right != null) {
20-
queue.offer(node.right);
21-
}
16+
while (!q.isEmpty()) {
17+
int size = q.size();
18+
List<Integer> t = new ArrayList<>();
19+
while (size-- > 0) {
20+
TreeNode node = q.poll();
21+
t.add(node.val);
22+
if (node.left != null) q.offer(node.left);
23+
if (node.right != null) q.offer(node.right);
2224
}
23-
res.add(list);
25+
res.add(t);
2426
}
25-
2627
return res;
2728
}
2829
}

solution/0100-0199/0102.Binary Tree Level Order Traversal/Solution.py

+17-29
Original file line numberDiff line numberDiff line change
@@ -6,33 +6,21 @@
66
# self.right = None
77

88
class Solution:
9-
def level(self, nodes):
10-
"""
11-
:type nodes: List[TreeNode]
12-
:rtype: List[List[int]]
13-
"""
14-
Ret = [[]]
15-
Next_Level = []
16-
17-
for each in nodes:
18-
Ret[0].append(each.val)
19-
20-
if(each.left != None):
21-
Next_Level.append(each.left)
22-
if(each.right != None):
23-
Next_Level.append(each.right)
24-
25-
if Next_Level :
26-
Ret.extend(self.level(Next_Level))
27-
return Ret
28-
29-
def levelOrder(self, root):
30-
"""
31-
:type root: TreeNode
32-
:rtype: List[List[int]]
33-
"""
34-
35-
if(root != None):
36-
return self.level([root])
37-
else:
9+
def levelOrder(self, root: TreeNode) -> List[List[int]]:
10+
if root is None:
3811
return []
12+
res = []
13+
q = []
14+
q.append(root)
15+
while q:
16+
size = len(q)
17+
t = []
18+
for _ in range(size):
19+
node = q.pop(0)
20+
if node.left is not None:
21+
q.append(node.left)
22+
if node.right is not None:
23+
q.append(node.right)
24+
t.append(node.val)
25+
res.append(t)
26+
return res

0 commit comments

Comments
 (0)