我试着回答以下两个问题,它们来自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 !!
答案 0 :(得分:1)
您应该考虑树的布局以及所需的结果。 一些提示:
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());
}