原题链接:Binary Tree Level Order Traversal
这道题有一定的难度,解法如下:
class Solution:
# @param {TreeNode} root
# @return {integer[][]}
def levelOrder(self, root):
solution = []
if root is None:
return solution
thisLevel = [root]
while len(thisLevel) > 0: # 注意这里判断thisLevel非空的方式,我们会在本文末尾讨论一下
tempNumbers = []
nextLevel = []
for temp in thisLevel:
tempNumbers.append(temp.val)
if temp.left is not None:
nextLevel.append(temp.left)
if temp.right is not None:
nextLevel.append(temp.right)
solution.append(tempNumbers)
thisLevel = nextLevel
return solution
关于判断thisLevel
非空的方法讨论:
一开始我提交的时候并不是用这种方式来判断其非空,而是采用了
while thisLevel is not []
,事实证明这样的判断是无效的。
我们来做一个测试:
def h(p):
if p is None:
print("None")
elif p is []:
print("[]")
else:
print("else")
print(len(p))
执行
print(h([]))
输出:
else
0
None
由此可见,我们要学会避免这种判别list为空的方式。