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

二叉树中的递归以遍历整个树

赵刚豪
2023-03-14

我正在研究二叉树。我在网上看到了一个遍历整个二叉树的代码。这是我得到的代码:“”

public void showAll(Node node)
{
    Node parent = node;
    if(parent != null)
    {
        System.out.println(" " + parent.person);
        showAll(parent.leftChild);
        showAll(parent.rightChild);
    }
}

“‘

我不明白的是这个函数如何打印正确的孩子?根据代码每次调用函数时,左子被打印出来。代码永远不会到达正确的孩子。

共有2个答案

钱远
2023-03-14

尝试使用二叉树的代码试运行,比如说5个节点。然后你可能会弄清楚。即使这样,如果您遇到问题,也要了解一些编译器如何调用函数或实际的堆栈跟踪是什么。

樊奇思
2023-03-14

这是后序遍历的教科书式实现。也被一些人称为“自下而上”遍历。

对于每次迭代,打印最左边的节点,然后打印最右边的节点。如果父节点为空,则树超过最高节点,即算法已完成。

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

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

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

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

  • 我尝试使用递归遍历二叉树。每个树要么有两个子树,要么没有子树(即,为子树保留的字段==无) 我想将每个分支(即两个子节点==无的每个节点)的最后叶子添加到一个列表中,并返回该列表。我使用“搜索”功能和助手“搜索库”功能来实现这一点。 通过调试器,我看到“search”函数中的列表确实包含我希望它显示的元素。但是,当它在search_base函数中返回时,结果似乎是一个空列表。 我非常困惑,如果有任

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