递归法:每次先取当前节点值,然后判断当前层是否有rasult的list,接着递归左右节点:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
result = []
level = 1
self.levelOrderFunc(root, result, level)
return result
def levelOrderFunc(self, root, result, level):
if root is None:
return
else:
if len(result) < level:
result.append([root.val])
else:
result[level - 1].append(root.val)
self.levelOrderFunc(root.left, result, level + 1)
self.levelOrderFunc(root.right, result, level + 1)
迭代方法:(仍就采用前面遍历时用的方法,详见:二叉树的遍历)
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
white = 1
gray = 0
level = 1
stack = [(white, root, level), ]
result = []
while stack:
color, root, level = stack.pop()
if root is None:
continue
if color:
stack.append((white, root.right, level + 1))
stack.append((white, root.left, level + 1))
stack.append((gray, root, level))
else:
if len(result) < level:
result.append([root.val])
else:
result[level - 1].append(root.val)
return result