java - 这个中序遍历算法是如何工作的?

标签 java recursion binary-search-tree traversal inorder

我在递归方面没有太多经验,所以我很难确定这个算法是如何工作的:

 public static void inorder(Node<?> n)
 {
  if (n != null)
  {
   inorder(n.getLeft());
   System.out.print(n.data + " ");
   inorder(n.getRight());
  }
 }

我知道它会访问树中每个节点的左右子节点,但我就是想不通为什么它能正常工作。

最佳答案

我会尝试一下。

想象一棵树

           a
      b          c
   d    e     f     g

每个字母代表一个节点对象。

当您传入“a”节点时会发生什么,它将查看第一个左节点并找到“b”。然后它将在 'b' 上调用相同的方法并等待它返回

在“b”中,它将查找第一个左节点并找到“d”。然后它将在 'd' 上调用相同的方法并等待直到它返回

在“d”中,它将查找第一个左节点并运行相同的方法。由于左节点为空,函数将返回。然后它将打印出'd' 在打印出'd'之后,它将调用右侧节点上的函数'd'也是null并立即返回。然后该方法的实例将返回到“b”节点函数。

它现在将打印出“b”,然后调用“b”右侧节点上的方法。

它将找到节点 'e' 然后它将调用 e 的左侧节点上的方法,该节点将为 null 并返回。然后打印出'e'。然后调用 'e' 的右节点上的方法,该节点也是 null 并返回到 'e' 方法调用。然后它将返回到“b”节点。

从'b'开始,它会返回到'a',打印出'a'并在'a'的右侧开始相同的过程。

最终会打印出来:

d b e a f c g

关于java - 这个中序遍历算法是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23744913/

相关文章:

javascript - 什么会导致 return 语句在 if 代码块中不起作用

java - 读取应用程序之外的文件

java - Java List of()静态方法

recursion - Fortran 递归段错误

c - 实现广度优先搜索时的错误 (C)

c++ - 可比较类和二叉搜索树

java - 无法在 AMD 64 位平台 JNI 上加载 IA 32 位 .dll

JAVA json架构2 POJO

java - 递归方法行为怪异

Bash 递归方法未完成方法调用堆栈