回 帖 发 新 帖 刷新版面

主题:[讨论]二叉树结点问题~请大家帮忙一下

今天我学习在上机二叉树。
  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);
}
这个算法就可以正确算出叶子结点数来,但我完全不明白是为什么这样,好像两个算法是一样的呀??
请大家帮忙一下,十分感谢!!!

回复列表 (共4个回复)

沙发

高手帮帮忙啊~~~~~~~~~~~~~~~~~~~~

板凳

leafs函数里的num用的是nodes函数求的

貌似楼主忘记修改此处了

3 楼

收下,谢谢

4 楼

5555555555555.为什么我老这么粗心呀!!!

我来回复

您尚未登录,请登录后再回复。点此登录或注册