来自测试的问题(递归设计) - 树 - Java

时间:2011-06-27 11:11:34

标签: java binary-tree

我试着回答以下两个问题,它们来自Java课程测试,但由于我可能需要使用的递归,这有点令人困惑。

第一个是接收二叉树的根并在树上返回最大值的方法。 (图A中的例子)。

这个问题(和第二个)说只在缺失的行中完成:

public static int maxInTree (Node root)
{
    if (root == null)
        return 0;
    if ((root.getLeftSon() == null) && (root.getRightSon() == null))
        ______________________    // I think that here: *return 1*;
    if (root.getLeftSon() == null)
    return _________________
    if (___________ == null)    // I think that here: *root.getRightSon()*
    _______________________________-
    return max______________________________
}

第二个问题是:对排序的二叉搜索树的第一个问题做同样的事情。

public static int maxInSearchTree (Node r)
{
    if (r == null)
        return 0;
    if (r.getRightSon() == null)
        __________________________
    return _______________________________
}

你可以假设有一种拉出父亲的方法: getNumber()

thnx !!

3 个答案:

答案 0 :(得分:1)

您应该考虑树的布局以及所需的结果。 一些提示:

  • 如果没有root,则返回适当的内容
  • 如果没有子节点,则返回当前节点(子树的根)值
  • 如果有孩子,请递归
  • 如果树被排序,则右子项的值应始终大于节点和左子项的
  • 如果树没有排序,您需要比较每个节点的值并记住最高的一个(max(...)

答案 1 :(得分:1)

不是一个完整的答案,因为托马斯已经涵盖了我已经说过的很多内容。但是,还有一些额外的提示:

根节点的左右子节点本身就是左子树和右子树的根节点。考虑到这一点,要获得左右子树的最大值,您需要使用左或右子项作为参数调用递归maxInTree(Node node)方法。

如果无序树只有左或右子树,则最大值是根节点值中的较大值和左或右子树中的最大值。

答案 2 :(得分:1)

我假设getNumber()给出了值(而不是父亲)。

public static int maxInTree (Node root)
{
    if (root == null)
        return 0;
    if ((root.getLeftSon() == null) && (root.getRightSon() == null))
        return root.getNumber();
    if (root.getLeftSon() == null)
        return max(root.getNumber(), maxInTree(root.getRightSon()));
    if (root.getRightSon() == null)
        return max(root.getNumber(), maxInTree(root.getLeftSon()));
    return max(root.getNumber(),
        max(maxInTree(root.getLeftSon()),maxInTree(root.getRightSon())));
}

public static int maxInSearchTree (Node r)
{
    if (r == null)
        return 0;
    if (r.getRightSon() == null)
        return r.getNumber();
    return maxInSearchTree(r.getRightSon());
}