二叉树的层次遍历(广度优先搜索)
20
/ \
12 22
/ / \
3 21 25
/ \
33
也就是说这样一棵树遍历的结果为:
第一种结果:
[
[33],
[3, 21, 25],
[12, 22],
[20]
]
第二种结果:
[
[20],
[12, 22],
[3, 21, 25],
[33]
]
第二种结果是从根按照树的高度(准确的说是按照节点的深度)遍历,得到第一种加上反转:
# 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):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
arr = []
def inner(node, level):
if node != None:
if len(arr) < level + 1:
arr.append([])
arr[level].append(node.val)
inner(node.left, level+1)
inner(node.right, level+1)
inner(root, 0)
arr.reverse()
return arr
这里递归设计得很巧妙,先调左边,紧接着就是右边,这样把每一层节点添加到同一个数组中。