Python 有人能解释二叉树递归的顺序遍历吗?

Python 有人能解释二叉树递归的顺序遍历吗?,python,recursion,Python,Recursion,我有一些递归遍历二叉树的代码 def IN_DFS(node, result=None): if result is None: result = [] if not node: return result Solution.IN_DFS(node.left, result) result.append(node.val) Solution.IN_DFS(node.right, result) return r

我有一些递归遍历二叉树的代码

def IN_DFS(node, result=None):
    if result is None:
        result = []
    if not node:
        return result
    Solution.IN_DFS(node.left, result)

    result.append(node.val)

    Solution.IN_DFS(node.right, result)

    return result
我需要一些帮助来了解正在发生的事情。我了解递归,我知道如何以迭代的顺序遍历二叉树,但似乎看不到这个递归解决方案的效果

因此,如果“node”不是None,我们将调用node.left上的递归函数,直到到达lead节点,在这种情况下,node.left是None,我们将移动到下一行“result.append(node.val)”?-是这样吗

然后在“node.right”上调用递归函数

假设我们到达第一个节点。左叶节点,将其值添加到“结果”中,然后返回到其父级,将其值添加到“结果”,然后检查其右子级

我不认为上面的说法是对的——有人能帮忙吗?谢谢

  • 因此,如果“node”不是None,我们将调用node.left上的递归函数,直到到达lead节点,在这种情况下,node.left是None,我们将移动到下一行“result.append(node.val)”?-是这样吗- 是的,就在这里。

  • 假设我们到达第一个节点。左叶节点,将其值添加到“结果”中,然后返回到其父级,将其值添加到“结果”,然后检查其右子级? 否,移动到右侧子树(当前节点的右侧节点)。


  • 谢谢,这很有道理。还有一件事我不太明白。假设我们到达最左边的叶节点,在处理它之后,我们再转到节点。对,但是父节点本身是什么时候添加的?因为父节点总是有子节点,所以在递归中,当遍历所有子节点时,我看不出我们将在哪里添加parent.node.val。假设您有一个添加了左子树的节点,那么程序将回溯到父节点并遍历其右子树。在右子树中,如果有另一个左子树,将首先遍历它,依此类推。当所有这些树(左子树和右子树)都被遍历后,程序将返回到原始节点并添加它。感谢您的解释,您可以获得更深入的理解-我确实理解了树是如何被遍历的,但我很难看到代码是如何实现您提到的遍历的。例如,我不理解第一个递归调用——假设我们到达一个叶节点,这意味着下一个节点是空的,所以我们点击了基本情况,我们将返回“result”,它是空的?然后调用下一行代码,即附加该叶节点的值。我们将从这里走向何方?理论上,我理解我们先回到父级,然后再回到正确的子级,但代码是如何实现这一点的?我们将返回空的“result”?-对然后调用下一行代码,即附加该叶节点的值。-对我们将从这里走向何方转到代码
    解决方案中的下一条语句。在_DFS(node.right,result)
    中,即将节点传递到刚才添加到结果中的节点的右侧(比如right)。节目照常进行。它首先检查RIGHT.left的左节点,然后是RIGHT,然后是RIGHT.RIGHT