【发布时间】:2019-07-11 18:32:26
【问题描述】:
我无法理解这种二叉搜索树方法是如何计算节点的,我在网上查看了很多示例,但是我找不到一个可以准确解释正在发生的事情的示例。
这是一个例子:
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 值是如何在递归调用中递增的?
【问题讨论】:
-
+ 1部分是左、右和当前的基本情况。它为子树中的每个节点调用一次,从而给出子树中的节点总数。如果 left 或 right 为 null,它只为 left 或 right 返回 0。
标签: java recursion binary-search-tree dynamic-programming