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

时间:2017-12-03 22:36:27

标签: java recursion tree

这是一种在二叉树中查找最大数字的方法 彼此之间的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 个答案:

答案 0 :(得分:0)

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

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

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

  1. 检查节点A是否为空指针 - >不,然后继续。

  2. 在A的左子树中找到以B为根的最大值。
    这将调用函数findMax(B)

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