需要帮助跟踪二叉树的这种反转方法
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)
:
- 检查节点A是否为空指针 - >否,然后继续。
- 找到以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的左子树中的最大值。 - 找到以C为根的A的右子树中的最大值。
这将调用函数
findMax(C)
: 与第2部分中的步骤类似,我们将最终获得以C为根的右子树中的最大值。 - 节点A的答案将是其值的最大值,并且其两个子树的最大值以B&C为根。
以上是关于需要帮助跟踪二叉树的这种反转方法的主要内容,如果未能解决你的问题,请参考以下文章