【问题标题】:Finding size of BST via recursion通过递归查找 BST 的大小
【发布时间】:2020-10-30 06:20:18
【问题描述】:

尝试在链接的 BST 中递归查找大小(对象总数)。得到奇怪的错误回报,不完全确定原因。

 private int size(BinaryTreeNode<T> root)
   {
      if (root == null) // empty tree
         return 0;
      
      if (root.getRight() == null && root.getLeft() == null) // base case, only root node exists
         return 1;
         
      else if (root.getRight() == null && root.getLeft() != null) // only left node exists
         return size(root.getLeft()) + 1;
      else if (root.getRight() != null && root.getLeft() == null) // only right node exists
         return size(root.getRight()) + 1;
      else
         return size(root.getRight()) + size(root.getLeft()) + 1; // right and left nodes exist
   }

当找到树的大小时:

    < 33 >
 1 >     < 67 >
   12 >  1    80
      13

我得到 1 作为返回大小而不是 6。

【问题讨论】:

  • 您能分享一下您构建树的方式吗?
  • 它可能不会帮助您调试它,但您不能删除大部分该方法并仅使用if(root == null) 基本案例,以及您的实现的最终案例吗?
  • 好点,一开始就应该认识到这一点。这巩固了很多,谢谢!
  • @ShashankGarg 不幸的是没有。这是一个课程项目,所以定义树构造方式的类比我目前的能力要好一点。我能做的最好的就是发布整个文件。

标签: java data-structures binary-tree binary-search-tree


【解决方案1】:

您的代码看起来正确,但可以简化为。

    private int size(BinaryTreeNode<T> root)
    {
        if (root == null) // empty tree
            return 0;
        
        return 1 + size(root.getLeft()) + size(root.getRight());

    }

【讨论】:

    【解决方案2】:

    试试这个

    private int size(BinaryTreeNode<T> root)
       {
          if (root == null) 
             return 0;
          int left = size(root.getLeft());
          int right = size(root.getright());
          return (1+left+right);
      }
    

    【讨论】:

      猜你喜欢
      • 2013-11-26
      • 2014-06-30
      • 1970-01-01
      • 1970-01-01
      • 2012-10-18
      • 1970-01-01
      • 2021-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多