二叉树模板

#include <stdio.h>
#include <stdlib.h>
#define ElemType char


//节点声明,数据域、左孩子指针、右孩子指针


typedef struct BiTNode
{


    char data;


    struct BiTNode *lchild,*rchild;


} BiTNode,*BiTree;


//先序建立二叉树


char a[100];
int i;


BiTree CreatBiTree()
{
    char ch;
    BiTNode *T;
    if(a[i++]==',')
        T=NULL;
    else
    {
        T = (BiTree)malloc(sizeof(BiTNode));
        T->data = a[i-1];
        T->lchild = CreatBiTree();
        T->rchild = CreatBiTree();
    }
    return T;//返回根节点
}


//先序遍历二叉树


void PreOrderTraverse(BiTree T)
{


    if(T)
    {


        printf("%c",T->data);


        PreOrderTraverse(T->lchild);


        PreOrderTraverse(T->rchild);


    }


}






//中序遍历


void InOrderTraverse(BiTree T)
{


    if(T)
    {


        InOrderTraverse(T->lchild);


        printf("%c",T->data);


        InOrderTraverse(T->rchild);


    }


}


//后序遍历


void PostOrderTraverse(BiTree T)
{


    if(T)
    {


        PostOrderTraverse(T->lchild);


        PostOrderTraverse(T->rchild);


        printf("%c",T->data);


    }


}




//层序遍历
void Cengxu(BiTree T)
{
    if (T==NULL)
        return ;
    else
    {
        BiTree q[10000];
        int s = 0,e = 0;
        q[e++] = T;
        while (s!=e)
        {
            BiTree p = q[s++];
            printf ("%c",p->data);
            if (p->lchild != NULL)
                q[e++] = p->lchild;
            if (p->rchild != NULL)
                q[e++] = p->rchild;
        }
    }
}


//求叶子节点个数


int Leave (struct BiTNode *T)
{




    if (T==NULL)
        return 0;


    if (T->lchild==NULL&&T->rchild==NULL)
        return 1;


    else
        return Leave(T->lchild)+Leave(T->rchild);
}


//计算二叉树的深度


int Depth(BiTree T)
{


    int d=0,depthl,depthr;


    if (T==NULL)
        return 0;


    if (T->lchild==NULL&&T->rchild==NULL)
        return 1;


    depthl = Depth(T->lchild);
    depthr = Depth(T->rchild);


    if (depthl > depthr)
        d = depthl;
    else d = depthr;


    return d+1;
}
int  main()
{


    while (~scanf ("%s",a))
    {
        i=0;
        int k,d;
        BiTree T;


        T = CreatBiTree();//建立


        PreOrderTraverse(T);
        printf ("\n");


        InOrderTraverse(T);
        printf ("\n");


        PostOrderTraverse(T);
        printf ("\n");


        Cengxu(T);
        printf ("\n");


        k = Leave(T);
        printf("%d\n",k);


        d = Depth(T);
        printf ("%d\n",d);


        getchar();
    }
    return 0;

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值