【发布时间】:2020-05-28 01:33:14
【问题描述】:
我有点发疯了。
我的目标很简单。在二叉树中,给出一个节点并以列表的形式返回该节点的路径。 有许多可用的实现。
Here 是最好和最直接的之一:
def path(root, k):
if not root:
return []
if root.val == k:
return [root.val]
res = path(root.left, k)
if res:
return [root.val] + res
res = path(root.right, k)
if res:
return [root.val] + res
return []
出于纯粹的教育原因,我决定用一个辅助函数重写它,在该函数中我传递一个空列表并递归地向其中添加元素。
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
def path2Node2(self, root, node2):
if not root:
return None
def _helper(root, node, paths):
if not root:
return []
if root.val == node.val:
paths.append(root.val)
return paths
return _helper(root.left, node, paths + [root.val])
return _helper(root.right, node, paths + [root.val])
return _helper(root, node2, [])
if __name__ == '__main__':
l = TreeNode(10)
l.left = TreeNode(8)
l.right = TreeNode(2)
l.left.left = TreeNode(3)
l.left.right = TreeNode(5)
l.right.left = TreeNode(4)
print(l.path2Node2(l, l.left))
如果我通过根节点(print(l.path2Node2(l, l)),它就可以工作。
如果我通过左孩子(print(l.path2Node2(l,l.left)))
但如果我通过 l.left.right 或 l.right.left,它会返回 []。
在过去的几个小时里我无法弄清楚。我错过了什么?
【问题讨论】:
标签: python list tree binary-tree