- Leetcode
102. Binary Tree Level Order Traversal
Given a binary tree, return the level order traversal of its nodes'values. (ie, from left to right, level by level).
For example:
Given binary tree [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
return its level order traversal as:
[
[3],
[9,20],
[15,7]
]
做道二叉树阿Q一下。。。
题意:按层来遍历二叉树,每一层的值为一个小集合 [一层] [二层] [三层]… 最后把所有层都输出为一个大集合。
思路:首先第一个集合是root自己,这是已知的,加到res里,之后的每一个集合都是基于前一个集合来进行遍历,判断是否有左孩子右孩子,用一个temp集合来保存本次遍历的节点,遍历完前一个集合后,把所得的temp集合追加到res里,接着遍历。
刚开始只保存的节点,输出的结果很奇怪,后来又在同样位置增加用于保存value值的最终结果集numres,以及临时保存某层节点的数值的numtemp (完全跟temp在一个位置), 一个是保存节点,为了下一次的遍历;一个是保存节点的数值,为了存到最终结果。
# 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]]
"""
#lis=[root]
if root==None:
return []
res=[]
res.append([root])
numres=[[root.val]]
i=0
while True:
temp=[]
numtemp=[]
for node in res[i]:
if node.left != None:
temp.append(node.left)
numtemp.append(node.left.val)
if node.right != None:
temp.append(node.right)
numtemp.append(node.right.val)
if temp==[]:
return numres
else:
res.append(temp)
numres.append(numtemp)
i+=1