Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自test(递归设计)-Trees-Java的一个问题_Java_Binary Tree - Fatal编程技术网

来自test(递归设计)-Trees-Java的一个问题

来自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()

我试着回答以下两个问题,它们来自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

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

  • 如果没有根,则返回适当的值
  • 如果没有子节点,则返回当前节点的(子树的根)值
  • 如果有子对象,则递归到其中
  • 如果对树进行排序,则右侧子节点的值应始终大于节点和左侧子节点的值
  • 如果未对树进行排序,则需要比较每个节点的值并记住最大值(
    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());
      }