主题:[讨论]二叉树结点问题~请大家帮忙一下
今天我学习在上机二叉树。
int nodes(BTreeNode *b) //这个算法是求二叉树的所有结点。
{
int num1,num2;
if(b==NULL)
return 0;
else{
num1=nodes(b->left);
num2=nodes(b->right);
return (num1+num2+1);
}
}
我想只计算二叉树的叶子结点。所以我在这个算法的基础上改了
int leafs(BTreeNode *b)
{
int num1,num2;
if(b==NULL)
return 0;
else if(!b->left&&!b->right)
return 1;
else{
num1=nodes(b->left);
num2=nodes(b->right);
return (num1+num2);
}
}
感觉上这个算法应该没问题呀,可结果就比总结点少一个,根本不是计算叶子结点。
后来我有改动了一下
int LeafCount(BTreeNode *t)
{
if(!t)return 0;
else if(!t->left&&!t->right)return 1;
else return LeafCount(t->left)+LeafCount(t->right);
}
这个算法就可以正确算出叶子结点数来,但我完全不明白是为什么这样,好像两个算法是一样的呀??
请大家帮忙一下,十分感谢!!!
int nodes(BTreeNode *b) //这个算法是求二叉树的所有结点。
{
int num1,num2;
if(b==NULL)
return 0;
else{
num1=nodes(b->left);
num2=nodes(b->right);
return (num1+num2+1);
}
}
我想只计算二叉树的叶子结点。所以我在这个算法的基础上改了
int leafs(BTreeNode *b)
{
int num1,num2;
if(b==NULL)
return 0;
else if(!b->left&&!b->right)
return 1;
else{
num1=nodes(b->left);
num2=nodes(b->right);
return (num1+num2);
}
}
感觉上这个算法应该没问题呀,可结果就比总结点少一个,根本不是计算叶子结点。
后来我有改动了一下
int LeafCount(BTreeNode *t)
{
if(!t)return 0;
else if(!t->left&&!t->right)return 1;
else return LeafCount(t->left)+LeafCount(t->right);
}
这个算法就可以正确算出叶子结点数来,但我完全不明白是为什么这样,好像两个算法是一样的呀??
请大家帮忙一下,十分感谢!!!