当前位置: 首页 > 知识库问答 >
问题:

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

缑泓
2023-03-14

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

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.left递归函数,直到我们到达一个前导节点,在这种情况下node.left是无,然后我们移动到下一行'result.append(node.val)'? - 这对吗?

然后在“节点”上调用递归函数。对吧??

假设我们到达第一个node.left叶节点,将其值添加到“结果”,然后返回一步到其父节点,将其值添加到“结果”,然后检查其正确的子节点?

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

共有1个答案

陆琦
2023-03-14

>

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

 类似资料:
  • 主要内容:递归实现,非递归实现二叉树后序遍历的实现思想是:从根节点出发,依次遍历各节点的左右子树,直到当前节点左右子树遍历完成后,才访问该节点元素。 图 1 二叉树   如图 1 中,对此二叉树进行后序遍历的操作过程为: 从根节点 1 开始,遍历该节点的左子树(以节点 2 为根节点); 遍历节点 2 的左子树(以节点 4 为根节点); 由于节点 4 既没有左子树,也没有右子树,此时访问该节点中的元素 4,并回退到节点 2 ,遍

  • 主要内容:递归实现,非递归实现二叉树中序遍历的实现思想是: 访问当前节点的左子树; 访问根节点; 访问当前节点的右子树; 图 1 二叉树   以图  1 为例,采用中序遍历的思想遍历该二叉树的过程为: 访问该二叉树的根节点,找到 1; 遍历节点 1 的左子树,找到节点 2; 遍历节点 2 的左子树,找到节点 4; 由于节点 4 无左孩子,因此找到节点 4,并遍历节点 4 的右子树; 由于节点 4 无右子树,因此节点 2 的左子

  • 主要内容:递归实现,非递归实现二叉树先序遍历的实现思想是: 访问根节点; 访问当前节点的左子树; 若当前节点无左子树,则访问当前节点的右子树; 图 1 二叉树   以图  1 为例,采用先序遍历的思想遍历该二叉树的过程为: 访问该二叉树的根节点,找到 1; 访问节点 1 的左子树,找到节点 2; 访问节点 2 的左子树,找到节点 4; 由于访问节点 4 左子树失败,且也没有右子树,因此以节点 4 为根节点的子树遍历完成。但节点

  • 我目前正在研究二叉树。我遇到了这个非常高效的遍历树的代码(在本例中,这是一个按顺序遍历)。它使用递归,这是我理解的一个概念。然而,我似乎无法理解这到底是如何工作的。最让我困惑的是,它是如何在每次列表中上升的,这样才能开始。左并不总是相同的数字。请有人一步一步地告诉我这是如何沿树向上移动的。提前谢谢 编辑以增加问题的清晰度: 我明白如果开始不是无,那么开始。left被添加到同一函数的递归调用中 我的

  • 我试图理解二叉树遍历(PreOrder)的实现。非递归方法很好,但我在试图理解递归方法时完全迷失了方向。 代码: 二叉树 我的理解是,当到达节点2(8-4-2)时,节点2的左边没有。所以条件将失败。 下面是我的问题。 点头之后。左无,右无。右边是横穿的?(因为如果启动:条件失败) 在节点1之后,逻辑如何移动到节点5哪个根节点。对吧? 我对递归的理解很差,请帮助!

  • 用递归方式遍历二叉树 思路说明 遍历二叉树的方法有广度优先和深度优先两类,下面阐述的是深度优先。 以下图的二叉树为例: 先定义三个符号标记: 访问结点本身(N) 遍历该结点的左子树(L) 遍历该结点的右子树(R) 有四种方式: 前序遍历(PreorderTraversal,NLR):先访问根结点,然后遍历其左右子树 中序遍历(InorderTraversal,LNR):先访问左子树,然后访问根节点