【发布时间】:2018-07-10 03:27:09
【问题描述】:
我正在尝试解决以下问题,假设我有这棵二叉树...
3
/ \
9 20
/ \
15 7
然后我需要获取每个级别的所有节点,所以我的结果将是......
[[3],[9,20],[15,7]]
我相信我正在接近解决方案,但我不确定我哪里出错了,如果有人可以帮助我解决我的解决方案,那就太好了,如果我走错了路,请让我知道。
我的第一步是使用以下函数获取树的深度...
def get_depth(self, root):
if root.left == None and root.right == None:
return 1
return max(self.get_depth(root.left), self.get_depth(root.right)) + 1
深度为3。
接下来我调用了一个旨在给我预期结果的函数...
def levelOrder(self, root):
depth = self.get_depth(root)
return self.find_comb(root, [[]]*depth, 0)
def find_comb(self, root, result, level):
if root is None:
return None
self.find_comb(root.left, result, level+1)
self.find_comb(root.right, result, level+1)
result[level].append(root.val)
return result
我的思考过程是,我将递归遍历树,level 参数将跟踪我所在的当前级别。然后我会将该级别上的所有root.val 附加到该索引处的结果中。
假设我在级别1(我们从0 开始),那么级别1 的节点是9 和20。所以结果看起来像[[], [9, 20], [], []],它会对树的每一层都这样做。我希望我的逻辑很清楚。相反,我得到的结果是......
[[9, 15, 7, 20, 3], [9, 15, 7, 20, 3], [9, 15, 7, 20, 3]]
【问题讨论】:
-
您的问题出在您附加
result[level].append(root.val)的那一行。例如,如果result=[[]]*3,那么result[0].append(1)会给你[[1], [1], [1]]。通过跟踪递归,可以很容易地证明节点出现的顺序。
标签: python algorithm recursion tree binary-tree