java - 计算二叉搜索树中的节点数

标签 java algorithm recursion binary-search-tree nodes

我编写了以下递归函数来计算二叉搜索树中的总节点数。

class BST {
...........
int lc=0,rc=0;
int totalnodes(Node root){
    if(root==null)return 0;
    lc=totalnodes(root.left);
    rc=totalnodes(root.right);
    return rc+lc+1;
  }
}

上面的函数会导致错误的答案。但是,下面的代码可以工作:

    class BST {
    int totalnodes(Node root){
        if(root==null)return 0;     
        return totalnodes(root.left)+totalnodes(root.right)+1;
    }
   }

我在第一个功能中缺少什么。

最佳答案

您忽略了您的 lcrc 不是本地的事实。因此,在对节点 root 计算 lc 后,它将被调用 totalnodes(root.left) 覆盖,而计算结果root 将稍后进行。

尝试将 lcrc 声明移至方法:

int totalnodes(Node root){
    if(root==null)return 0;
    int lc=totalnodes(root.left);
    int rc=totalnodes(root.right);
    return rc+lc+1;
}

关于java - 计算二叉搜索树中的节点数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39041005/

相关文章:

java - 你能让 mockito (1.10.17) 在接口(interface)中使用默认方法吗?

python - 按实体值对 tkinter 列表框中的项目进行排序

algorithm - 计算两个数组元素之间的距离

PHP递归函数问题。

c - 返回n==0? 0 : fib2(n, 0, 1) 我找不到那个?

recursion - 为什么这个递归加法在Scheme中是错误的呢?

java - hibernate - 如何在 mysql 和 oracle 数据库中设置自动增量?

java - Android 应用程序中的 Google 翻译 API

java - Jsoup - 只保留标签并删除所有文本

algorithm - 返回获取数组左值或右值的最大值