-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathBinaryTreeLevelOrderTraversal.py
More file actions
83 lines (72 loc) · 2.45 KB
/
BinaryTreeLevelOrderTraversal.py
File metadata and controls
83 lines (72 loc) · 2.45 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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# 102. Binary Tree Level Order Traversal
# 107. Binary Tree Level Order Traversal II
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def levelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
if not root:
return []
order = [[]]
# 队列记录树节点与它所在的层数
queue = [(root, 0)]
while queue:
curr = queue[0]
if len(order) < curr[1] + 1:
order.append([])
order[curr[1]].append(curr[0].val)
del queue[0]
# 如果存在左右子节点,将它们加入队列,对应层数是当前层数+1
if curr[0].left:
queue.append((curr[0].left, curr[1]+1))
if curr[0].right:
queue.append((curr[0].right, curr[1]+1))
return order
def levelOrderBottom(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
if not root:
return []
order = [[]]
# 队列记录树节点与它所在的层数
queue = [(root, 0)]
while queue:
curr = queue[0]
# 与上一题不同的是,当order的大小小于当前层数+1时,我们将curr插入到order最前面,然后将元素添加在order的第一项
if len(order) < curr[1] + 1:
order.insert(0, [])
order[0].append(curr[0].val)
del queue[0]
# 如果存在左右子节点,将它们加入队列,对应层数是当前层数+1
if curr[0].left:
queue.append((curr[0].left, curr[1]+1))
if curr[0].right:
queue.append((curr[0].right, curr[1]+1))
return order
class Solution2:
# 递归方法,采用dfs,在ans相应的行添加遍历到的节点(107同理可得)
def levelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
ans = []
self.level(root, ans, 1)
return ans
def level(self, root, ans, level):
if not root:
return
if not ans or len(ans) < level: # 添加新的一行
ans.append([root.val])
else:
ans[level-1].append(root.val)
self.level(root.left, ans, level+1)
self.level(root.right, ans, level+1)