我无法理解这是如何二叉树方法计算节点,我在很多例子在网上看了,但是我无法找到一个,这将解释究竟发生了什么。
下面是一个例子:
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;
}
这是我很理解这种方法的过程中,也许有人可以帮助我了解我要去哪里错了。
因此,我不明白的是被递增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价值正在递归调用会增加吗?
你应该想想递归的终点。
假设你有没有孩子一个节点。
双方left
并right
会null
,所以你将没有递归调用。
你会回来
leftNodes + rightNodes + 1; // 0 + 0 + 1 == 1
现在,假设你有一个简单的树,它由根,左孩子和右孩子。
当你调用nodes()
该树的根,都left
与right
不为空,所以我们会打电话给双方left.nodes()
和right.nodes()
。由于两个左右的孩子是叶节点(即他们没有孩子),对于递归调用返回1,以上解释的那样。
因此,当递归调用返回,我们会回来
leftNodes + rightNodes + 1; // 1 + 1 + 1 == 3
这是我们的树节点的数量。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句