二叉树的基本操作(先序创建二叉树),得到先序、中序、后序遍历序列,以及叶子结点和树的深度

二叉树的基本操作(先序创建二叉树)

#include <stdio.h>
#include<stdlib.h>

//结构体 
typedef struct node
{
    char data;
    struct node *lchild;
    struct node *rchild;
}BiTNNode,BiTree;

//先序构造二叉树
BiTNNode *creatBiTree()
{
    char k;
    scanf("%c",&k);
    if(k=='#')
        return NULL;
    BiTNNode *T=(BiTNNode *)malloc(sizeof(BiTNNode));
    T->data=k;
    T->lchild=creatBiTree();
    T->rchild=creatBiTree();
    return T;
}

//先序遍历
void PreOrder(BiTNNode *T)
{
    if(T)
    {
        printf("%2c",T->data);
        PreOrder(T->lchild);
        PreOrder(T->rchild);
    }
}

//中序遍历
void InOrder(BiTNNode *T)
{
    if(T)
    {
        InOrder(T->lchild);
        printf("%2c",T->data);
        InOrder(T->rchild);
    }
}

//后序遍历
void PostOrder(BiTNNode *T)
{
    if(T)
    {
        PostOrder(T->lchild);
        PostOrder(T->rchild);
        printf("%2c",T->data);
    }
}

//统计叶子结点的个数
int Leaf(BiTNNode *T)
{
	int LeafCount;
    if(T==NULL)
        LeafCount=0;
    else if(T->lchild==NULL&&T->rchild==NULL)
        LeafCount=1;
    else
        LeafCount=Leaf(T->lchild)+Leaf(T->rchild);
    return LeafCount;
}

//计算二叉树的深度
int TreeDepth(BiTNNode *T)
{
    if(T==NULL)
        return 0;
    else if(T->lchild==NULL&&T->rchild==NULL)
        return 1;
    else
    {
        int depthleft=TreeDepth(T->lchild)+1;
        int depthright=TreeDepth(T->rchild)+1;
        return depthleft>depthright?depthleft:depthright;
    }
}

//主函数
int main(){
    printf("先序构造一棵二叉树(左/右孩子为空用'#'表示):");
    BiTNNode *T=creatBiTree();
    printf("此二叉树的先序遍历序列是:");
    PreOrder(T);
    printf("\n");
    printf("此二叉树的中序遍历序列是:");
    InOrder(T);
    printf("\n");
    printf("此二叉树的后序遍历序列是:");
    PostOrder(T);
    printf("\n");
    printf("这棵树叶子结点有%d个\n",Leaf(T));
    printf("这棵树的深度为:%d\n",TreeDepth(T));
    return 0;
} 

运行结果截图:
在这里插入图片描述
上述运行结果二叉树为:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值