我无法理解这种二叉搜索树方法是如何计算节点的,我在网上查看了许多示例,但是我找不到一个可以准确解释正在发生的事情的示例。
这是一个例子:
public int nodes() {
int leftNodes = 0;
if (left != null) {
leftNodes = left.nodes();
}
int rightNodes = 0;
if (right != null) {
rightNodes = right.nodes();
}
return leftNodes + rightNodes + 1;
}
这就是我理解这种方法的过程的方式,也许有人可以帮助我理解我哪里出错了。
该方法是从其自身外部从一个 BTS 对象调用的;“tree.nodes() 等”。
int leftNodes 被声明并设置为 0。
如果有左节点(假设有),那么leftNodes的值将被赋值给nodes()调用的返回值;
递归调用将再次通过 nodes 方法,再次将 leftNodes 分配为零。
所以我不明白 leftNodes 变量在哪里递增?似乎它只是再次通过该方法递归,但值没有改变,从我看到的 leftNodes 和 rightNodes 将始终为 0。
我发现了另一个 BTS 计数的例子,这个使用 C++
int CountNodes(node*root)
{
if(root==NULL)
return 0;
if(root->left!=NULL)
{
n=n+1;
n=CountNodes(root->left);
}
if(root->right!=NULL)
{
n=n+1;
n=CountNodes(root->right);
}
return n;
}
我发现这种方法更容易遵循,因为每次找到节点时 n 显然都会增加。
我的问题是 leftNodes/rightNodes 值是如何在递归调用中递增的?
慕雪6442864
守着星空守着你
皈依舞
相关分类