-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path102-LevelOrder.py
More file actions
65 lines (53 loc) · 1.77 KB
/
102-LevelOrder.py
File metadata and controls
65 lines (53 loc) · 1.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# Python3
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
ret = [] # 二维列表
if root == None:
return ret
q = [] # 队列,列表模拟
q.append(root)
while q != []:
n = len(q)
tmp = []
for _ in range(n):
node = q[0]
tmp.append(node.val)
if node.left:
q.append(node.left)
if node.right:
q.append(node.right)
q.pop(0) # 删除队列头部元素
ret.append(tmp)
return ret
# C++ 广度优先搜索
# 时间复杂度:每个点进队出队各一次,故渐进时间复杂度为 O(n)
# 空间复杂度:队列中元素的个数不超过 nn 个,故渐进空间复杂度为 O(n)
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> ret;
if (!root) {
return ret;
}
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
int currentLevelSize = q.size();
ret.push_back(vector<int>());
for (int i = 1; i <= currentLevelSize; i++) {
auto node = q.front(); q.pop();
ret.back().push_back(node->val); # ret.back() 取出每次 while 循环创建的新 vector
if (node->left) q.push(node->left);
if (node->right) q.push(node->right);
}
}
return ret;
}
};
# C++队列 Queue 类成员函数如下:
# back() 返回最后一个元素
# empty() 如果队列空则返回真
# front() 返回第一个元素
# pop() 删除第一个元素
# push() 在末尾加入一个元素
# size() 返回队列中元素的个数