-
Notifications
You must be signed in to change notification settings - Fork 1
/
107. Binary Tree Level Order Traversal II.py
90 lines (68 loc) · 1.73 KB
/
107. Binary Tree Level Order Traversal II.py
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
84
85
86
87
88
89
90
"""
107. Binary Tree Level Order Traversal II
Easy
714
133
Favorite
Share
Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).
For example:
Given binary tree [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
return its bottom-up level order traversal as:
[
[15,7],
[9,20],
[3]
]
"""
import collections
# Definition for a binary tree node.
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def levelOrderBottom(self, root: TreeNode):
if root is None:
return []
result = collections.deque([])
roots = [root]
values = [root.val]
while roots:
if values:
result.appendleft(values)
roots, values = self.get_next_level_children(roots)
return list(result)
def get_next_level_children(self, roots):
children = []
values = []
for root in roots:
if root.left is not None:
children.append(root.left)
values.append(root.left.val)
if root.right is not None:
children.append(root.right)
values.append(root.right.val)
return children, values
if __name__ == '__main__':
root = TreeNode(0)
node1 = TreeNode(1)
node2 = TreeNode(2)
node3 = TreeNode(3)
node4 = TreeNode(4)
node5 = TreeNode(5)
node6 = TreeNode(6)
root.left = node1
root.right = node2
node1.left = node3
node1.right = node4
node2.left = node5
node2.right = node6
solution = Solution()
print(solution.levelOrderBottom(root))