这是来自leetcode的问题。 https://leetcode.com/problems/binary-tree-level-order-traversal/
所以这是我的代码,但我真的不知道输入是什么以及它与下面定义的TreeNode的关系。
二叉树节点的定义。
# class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None
class Solution:
# @param {TreeNode} root
# @return {integer[][]}
def levelOrder(self, root):
if not root:
return []
else:
printout, CurrLevel = [], [root]
while CurrLevel:
printout.extend(CurrLevel)
NextLevel = []
for item in CurrLevel:
temp = []
if item.left != None:
temp.append(item.left)
if item.right != None:
temp.append(item.right)
NextLevel = NextLevel.extend(temp)
CurrLevel = NextLevel
return printout
输入:[1,2]
输出:[[1,2]]
预期:[[1],[2]]
所以我终于遇到了这个,那么treenode究竟是什么呢?为什么它看起来像一个列表? 这是一个OJ问题,我对测试用例非常不确定,因为我无法理解这里提供的treenode。如问题所述,似乎只有一个" root"每次输入元素。
我感到很困惑,因为对于每个测试用例(leetcode中的每个问题都包含数十或数百个测试用例以测试程序的有效性),只输入一个TreeNode(名为root),如果是,我可以愉快地引用它的.val,它的.left或它的.right,因此一棵树可以从" root"元件。但是通过我在这里看到的测试用例(一旦程序产生了错误的解决方案,它就会生成一份报告,这就是为什么我要显示"输入" [1,2]这里提供的),我看到一个列表,或者至少是列表,其中包含两个元素。我所期望的只是在这里输入一个名为root的TreeNode,但现在我看到了一个列表。很明显,我知道我应该打印出一份列表清单,这与我在这里提出的混乱有所不同。 所以在[1,2]中,我无法理解1和2分别代表一个整数?一个treenode? 实际上我认为[1,2]本身就是一个treenode,其中1和2代表.val,.left。
重要的是,我的代码基于这样的假设,即每个输入都是一个节点,并留下[1,2,3](可能代表TreeNode的.val,.left,.right)后面的任何输入。我后来发现我确实做错了,修改了我的代码如下:
class Solution:
# @param {TreeNode} root
# @return {integer[][]}
def levelOrder(self, root):
if not root:
return []
else:
printout, CurrLevel = [], [root]
while CurrLevel:
values = []
for node in CurrLevel:
values = values.append(node.val)
printout.append(values)
NextLevel = []
for item in CurrLevel:
temp = []
if item.left != None:
temp.append(item.left)
if item.right != None:
temp.append(item.right)
NextLevel = NextLevel.extend(temp)
CurrLevel = NextLevel
return printout
这次似乎发生以下错误:
输入:[1]
输出:[null]
预期:[[1]]
我检查了我的代码,发现node.val在输入时产生1:[1],而值产生[null]!这太奇怪了!