Java 二叉搜索树中的节点计数

Java 二叉搜索树中的节点计数,java,algorithm,recursion,binary-search-tree,nodes,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 {

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

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;
    }
   }

第一个函数缺少的是什么。

您缺少的是您的
lc
rc
不是本地的。因此,在为节点
根节点
计算
lc
后,它将被调用
totalnodes(root.left)
覆盖,而
根节点的结果计算将在稍后进行

尝试将
lc
rc
声明移动到方法:

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