Binary Tree Level Order Traversal

題目
思路

  1. 一次一層很直覺想到廣先搜尋 (BFS),所以用 iterative 的做法來解
  2. 一次迴圈處理一層,並把下一層節點放入 stack 繼續在下次迴圈處理
    • stack 也是 list of list, 裡面的每個 list 都是一層節點
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
if not root:
return []
stack, values = [[root]], []
while stack:
level_vals = []
level_nodes = []
nodes = stack.pop()
for node in nodes:
level_vals.append(node.val)
if node.left:
level_nodes.append(node.left)
if node.right:
level_nodes.append(node.right)
if level_nodes:
stack.append(level_nodes)
values.append(level_vals)
return values

但假如用遞迴的話怎麼解?

Recursive case: 把當下這個節點的 value 放到對應 level index 的 list 中

  • 如果沒有對應的 level index 就加一個空 list 進去 (level_ind 會從 0 開始依序傳入,不會有跳號的情況)

    1
    2
    3
    4
    5
    try:
    level = res[level_ind]
    except IndexError:
    level = []
    res.append(level)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
def put_value(node, level_ind, res):
# Base case
if not node:
return

# Recursive case
try:
level = res[level_ind]
except IndexError:
level = []
res.append(level)
level.append(node.val)
put_value(node.left, level_ind + 1, res)
put_value(node.right, level_ind + 1, res)

if not root:
return []
res = []
put_value(root, 0, res)
return res

評論

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×