需要帮助跟踪二叉树的这种反转方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了需要帮助跟踪二叉树的这种反转方法相关的知识,希望对你有一定的参考价值。

这是一种在二叉树中查找最大数字的方法。 彼此之间的2个递归线让我感到困惑。有人可以告诉我如何跟踪这段代码。

public int findMax() {
return findMax(root);
}
public static int findMax(Node n) {
if(n == null)
return -1;
int maxLeft = findMax(n.left);
int maxRight = findMax(n.right);
return Math.max(((Integer)n.data).intValue(), Math.max(maxLeft, maxRight));
}
答案

(1)A / / (2)B (5)C / / (3)N (4)N (6)N (7)N

  • A-B-C是普通节点。
  • N表示NULL。

我们假设我们调用函数findMax(A)

  1. 检查节点A是否为空指针 - >否,然后继续。
  2. 找到以B为根的A的左子树中的最大值。 这将调用函数findMax(B): 检查节点B是否为NULL指针 - >否,然后继续。 找到B的左子树中的最大值,该子树以N为根。 这将调用函数findMax(NULL)。 由于Node为NULL,因此将返回-1。 现在,找到以N为根的B的右子树中的最大值。由于Node为NULL,因此将返回-1。 节点B的答案现在是Left Subtree,Right Subtree和节点B的值的最大值。 现在,我们计算了以B为根的A的左子树中的最大值。
  3. 找到以C为根的A的右子树中的最大值。 这将调用函数findMax(C): 与第2部分中的步骤类似,我们将最终获得以C为根的右子树中的最大值。
  4. 节点A的答案将是其值的最大值,并且其两个子树的最大值以B&C为根。

以上是关于需要帮助跟踪二叉树的这种反转方法的主要内容,如果未能解决你的问题,请参考以下文章

二叉树的非递归遍历

二叉树的非递归遍历

二叉树遍历的应用:判断二叉树的类别

DS二叉树—二叉树镜面反转

二叉树的镜像

在 C++ 中反转二叉树