我编写了以下递归函数来计算二叉搜索树中的总节点数。
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;
}
}
第一个功能我缺少什么。
答案 0 :(得分:2)
您错过了lc
和rc
不属于本地的事实。因此,在为节点lc
计算root
后,它将被totalnodes(root.left)
的调用覆盖,而root
的结果计算将在稍后进行。
尝试将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;
}