'''这是二叉树的定义''' class TreeNode: def __init__(self, val): self.val = val self.left, self.right = None, None '''这是路径函数''' def dfs(node, result, tmp): if node == None: return tmp.append(node) if node.left == None and node.right == None: result.append([i.val for i in tmp]) return dfs(node.left, result, tmp) dfs(node.right, result, tmp)
Das ist mein Code, aber er druckt jedes Mal alle Knoten. Dann entdeckte DEBUG, dass das tmp-Array jedes Mal, wenn es zum rechten Teilbaum zurückkehrt, den Zustand des linken Teilbaums beibehält, bevor es ihn durchquert, was überhaupt nicht der Zustand von der Wurzel zum rechten Teilbaum ist.
Ist das ein Problem mit dem Umfang? Da ich aber keine Lösung finde, bitte ich hier um eine Antwort, danke
是作用域的问题,你的算法大概没有多少问题,主要是你要知道,给函数传参的时候,尤其是传入可变参数(你这里是列表)的时候,你要做到心中有数。这里你的问题主要集中在tmp上面,之所以会保留左子树的状态,是因为你在遍历左子树的时候,添加了左子树到tmp中了,然后你又在下一次递归调用中把添加后的列表放到了列表中,如果只有左子树,是没问题的,如果有右子树,就会出现问题。语言表达能力有限,我把改过的代码贴出来给你看看