来自test(递归设计)-Trees-Java的一个问题
我试着回答以下两个问题,它们来自Java课程测试,但有点混乱,因为我可能需要使用递归 第一种方法是接收二叉树的根并返回树上的最大值的方法。(图A中的示例) 这个问题(以及第二个问题)只在缺少的行中填写:来自test(递归设计)-Trees-Java的一个问题,java,binary-tree,Java,Binary Tree,我试着回答以下两个问题,它们来自Java课程测试,但有点混乱,因为我可能需要使用递归 第一种方法是接收二叉树的根并返回树上的最大值的方法。(图A中的示例) 这个问题(以及第二个问题)只在缺少的行中填写: public static int maxInTree (Node root) { if (root == null) return 0; if ((root.getLeftSon() == null) && (root.getRightSon()
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 您应该考虑树的布局以及所需的结果。 一些提示:
- 如果没有根,则返回适当的值
- 如果没有子节点,则返回当前节点的(子树的根)值
- 如果有子对象,则递归到其中
- 如果对树进行排序,则右侧子节点的值应始终大于节点和左侧子节点的值
- 如果未对树进行排序,则需要比较每个节点的值并记住最大值(
)max(…)
- 如果没有根,则返回适当的值
- 如果没有子节点,则返回当前节点的(子树的根)值
- 如果有子对象,则递归到其中
- 如果对树进行排序,则右侧子节点的值应始终大于节点和左侧子节点的值
- 如果未对树进行排序,则需要比较每个节点的值并记住最大值(
)max(…)
- 这不是一个完整的答案,因为托马斯涵盖了我本该说的很多内容。但是,还有一些提示:
根节点的左、右子节点本身就是左、右子树的根节点。考虑到这一点,要获得左、右子树的最大值,需要调用递归的
maxInTree(Node Node)
方法,并将左、右子树作为参数
如果无序树只有一个左或右子树,那么最大值是根节点值和左或右子树中的最大值中的较大值。不是完整答案,因为Thomas已经介绍了我说过的很多内容。但是,还有一些提示: 根节点的左、右子节点本身就是左、右子树的根节点。考虑到这一点,要获得左、右子树的最大值,需要调用递归的
maxInTree(Node Node)
方法,并将左、右子树作为参数
如果无序树只有左或右子树,则最大值是根节点值和左或右子树中的最大值中的较大值。我假设getNumber()给出值(而不是父节点)
我假设getNumber()给出了值(不是父项)
我可以马上告诉你,“//我想这里是:返回1;”错误,除非根节点恰好包含值
1
。如果根没有子节点(这个“子”术语从哪里来?这是美国的东西吗?),那么树只包含一个节点(值),因此最大值必须是根节点本身的值。我可以直接告诉你“//我认为这里:返回1;”错误,除非根节点恰好包含值1
。如果根节点没有子节点(这个“子”术语从何而来?这是美国的东西吗?),那么树只包含一个节点(值),因此最大值必须是根节点本身的值。“return max(root.getNumber())中缺少一些内容,'. thnx@Master不,没有遗漏任何内容,表达式只是在下一行继续。@Maurice我想说的是,maxInSearchTree
中的递归应该是相同的方法,而不是maxInTree
,因为您知道子树也是排序的:)@Thomas Good point,尽管我会更进一步,指出如果它不调用自己,它甚至不是递归。@Thomas,关于max函数,我可以不用提到数学课就使用它吗?比如:数学,马克斯。。。等等@Master:是的,使用静态导入:导入static java.lang.Math.max;“return max(root.getNumber(),”中缺少某些内容。thnx@Master不,没有遗漏任何内容,表达式只是在下一行继续。@Maurice我想说的是,maxInSearchTree
中的递归应该是相同的方法,而不是maxInTree
,因为您知道子树也是排序的:)@Thomas Good point,尽管我会更进一步,指出如果它不调用自己,它甚至不是递归。@Thomas,关于max函数,我可以不用提到数学课就使用它吗?比如:数学,马克斯。。。等等@Master:是的,使用静态导入:导入static java.lang.Math.max;
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());
}