如何解决如何在非二叉树python中找到路径
如何使用python在非二叉树中找到从树根到特定节点的路径?
这是我的代码,它似乎不起作用。
class Tree:
def __init__(self,val):
self.val = val
self.up=None
self.down=None
self.left = None
self.right = None
def findpath(root,end,path):
if root is None:
path=[]
return None
if root.val == end:
path.append(root.val)
return path
else:
path.append(root.val)
return findpath(root.up,path),findpath(root.down,findpath(root.left,findpath(root.right,path)
解决方法
一些问题:
-
findpath
方法的缩进表明这是您的Tree
类的一个方法,但您调用它(递归地)作为一个独立的函数。所以,它不是你的类的方法,应该有固定的缩进。但是,将其作为类的方法也不错。 -
最后的
return
语句返回 四次 递归调用的结果,因此它返回 4 个值,其中这 4 个值中的每一个都可以代表 4 个值(通过递归),等等...这是不对的。该函数应该返回一个值:路径。 -
path.append
改变调用者提供的路径。但是调用者不知道这种变化,并且将相同的路径变量传递给另一个递归调用,期望它表示与前一个调用中的相同路径。这不是真的。所以这会产生不良影响。您应该让路径保持不变,并在必要时将新构建的路径传递给递归调用。 -
搜索将循环进行。您需要跟踪哪些节点已经被访问过,并避免再次访问它们。
我发现构造相反方向的路径更容易:找到目标后,返回一个仅包含该目标值的数组。然后调用者可以将它的单元格添加到它并返回that,...等
这里的 findpath
是 Tree
类的一个方法:
def findpath(self,end):
visited = set()
def dfs(node):
if node is None or node in visited:
return # Failure
if node.val == end:
return [end] # Success. This path that will be extended
visited.add(node) # Mark this node as visited
path = dfs(node.up) or dfs(node.down) or dfs(node.left) or dfs(node.right)
if path:
path.append(node.val)
return path
path = dfs(self)
if path:
path.reverse()
return path
内部函数(dfs
)将反向返回路径,因此外部函数将其反向。
重要:这不一定会找到最短路径,只是a路径。如果需要最短路径,那么最好使用广度优先搜索。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。