统计二叉树中叶子节点的数目

来源:互联网 发布:数据列表测试用例 编辑:程序博客网 时间:2024/03/28 22:44
#include <stdio.h>#include <malloc.h>typedef char ElemType;typedef struct Node{    ElemType data;    Node *Lchild,*Rchild;} BiTNode,*BiTree;int ans=0;BiTree CreateBiTree();//建立二叉树void Leaf1(BiTree T);//后序遍历统计叶子节点数目int Leaf2(BiTree T);//分治法统计叶子节点数目int main(void){    BiTree root=CreateBiTree();    int count=Leaf2(root);    printf("%d\n",count);    Leaf1(root);    printf("%d\n",ans);    return 0;}BiTree CreateBiTree()//建立二叉树{    ElemType x;    BiTree T;    scanf("%c",&x);    if(x=='#')        T=NULL;    else    {        T=(BiTree)malloc(sizeof(BiTNode));        T->data=x;        T->Lchild=CreateBiTree();        T->Rchild=CreateBiTree();    }    return T;}void Leaf1(BiTree T)//后序遍历统计叶子节点数目{    if(T!=NULL)    {        Leaf1(T->Lchild);        Leaf1(T->Rchild);        if(T->Lchild==NULL&&T->Rchild==NULL)            ans++;    }}int Leaf2(BiTree T)//分治法统计叶子节点数目{    int count;    if(T==NULL)        count=0;    else if(T->Lchild==NULL&&T->Rchild==NULL)        count=1;    else        count=Leaf2(T->Lchild)+Leaf2(T->Rchild);    return count;}

阅读全文
1 0
原创粉丝点击