二叉树中,求度为2和1的节点及叶节点的个数递归算法!注意:仅需要递归算法哦!

二叉树中,求度为2和1的节点及叶节点的个数递归算法!注意:仅需要递归算法哦!,第1张

typedef struct _node{
_node left;
_node right;
int value;
}node;
void calulateDegree(node rt,int two,int one,int zero)
{
if(rt==NULL)
return;
if(rt->left!=NULL&&rt->right!=NULL)
two++;
else if(rt->left!=NULL||rt->right!=NULL)
one++;
else
zero++;
calulateDegree(rt->left,two,one,zero);
calulateDegree(rt->right->two,one,zero);
}

int NumOfOne(BiNodep)
{
    int count=0;
    if(p->lchild!=NULL&&p->rchild=NULL)
    {
        count++;
        NumOfOne(p->lchild);
    }
    else if(p->rchild!=NULL&&p->lchild=NULL)
    {
        count++;
        NumOfOne(p->rchild);
    }
    return count;
}
int Num()
{
    return NumOfOne(root);
}

设二叉树中度为2结点个数n2,度为1结点个数n1,叶子结点个数n0,按照二叉树的性质:
n2 = n0 -1,因此度为2结点数为465-1 = 464
所以度为1结点个数为1024-465-464=95

你好,
叶子结点数(度为0的节点数)=度为2的节点数 + 1
所以,度为2的节点数 = 69
总结点数=度为0的节点数 + 度为1的节点数 + 度为2的节点数
=70 + 80 + 69
=219

不好意思 昨天比较忙 屁颠屁颠的 今天给你写了下 就把这3个算法写了下 在自己的程序上测试过了 都没问题 树的建立就你自己做吧 3个 *** 作如下
int LeafCount(BTree T)
{
if (!T) return 0;
else if (!T->lchild && !T->rchild)
{
return 1;
}
else
{
return LeafCount(T->lchild) + LeafCount(T->rchild);
}
}
void OneDegree(BTree T,int &count)
{
if (!T || (!T->lchild && !T->rchild)) return;
else if (T->lchild && !T->rchild)
{
++count;
OneDegree(T->lchild,count);
}
else if (!T->lchild && T->rchild)
{
++count;
OneDegree(T->rchild,count);
}
else
{
OneDegree(T->lchild,count);
OneDegree(T->rchild,count);
}
}
int TreeDepth(BTree T)
{
if (!T) return 0;
else
{
return (TreeDepth(T->lchild) > TreeDepth(T->rchild) TreeDepth(T->lchild) : TreeDepth(T->rchild)) + 1;
}

}

设二叉树中度为0,1,2的结点分别有N0,N1,N2个,总结点数为N
(二叉树中结点数满足N0=N2+1)
总结点数N=N0+N1+N2,将上式代入,即=N2+1+N1+N2=2N2+N1+1
根据你给的题,结点总数=216+15=47


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/10423846.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-08
下一篇 2023-05-08

发表评论

登录后才能评论

评论列表(0条)

保存