Binary Tree Level Order Traversal
Last updated
Last updated
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def levelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
if not root:
return []
ans, level = [], [root]
while level:
ans.append([node.val for node in level])
temp = []
for node in level:
temp.extend([node.left, node.right])
level = [leaf for leaf in temp if leaf]
return ansroot = TreeNode(1)
root.left = TreeNode(1.5)
root.right = TreeNode(2)
root.right.left = TreeNode(3)
result = Solution().preorderTraversal(root)ans
[[1]]
temp
[<__main__.TreeNode object at 0x0000000003ED4DA0>, <__main__.TreeNode object at 0x0000000003ED4A58>]
ans
[[1], [1.5, 2]]
temp
[None, None]
temp
[None, None, <__main__.TreeNode object at 0x0000000003ED4B00>, None]
ans
[[1], [1.5, 2], [3]]
temp
[None, None] 对于树结点,ans.append(root.val)
为了遍历树的子结点,根据树的特性,需要对应的结点对象
tmp.extend([root.left,root.right])
判断是否存在,从而才能给下一步进行val取值
nextroot = [leaf for leaf in tmp if leaf]
对于树左结点,ans.append([node.val for node in nextroot])
由此将第一层的树结点表达式也进行修改,从而保证统一性
类似的处理遍历更下一层,这就是抽象的过程! >>> a.extend([1,2])
>>> print a
[1, 2, '3', '1', 1, 2]
>>> a.append([1,2])
>>> print a
[1, 2, '3', '1', 1, 2, [1, 2]]