今天520,二叉树——前、中、后序遍历二叉树

本文介绍了一种使用C语言实现的二叉树数据结构及其遍历方法,包括前序、中序和后序遍历,并展示了如何计算二叉树的深度及叶子节点的数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【二叉树——前、中、后序遍历二叉树】

#include<stdio.h>

#include<stdlib.h>



typedef struct BTNode

{  

    int data;  

    struct BTNode *lChild;  

    struct BTNode *rChild;  

}BiTNode;  



//先序创建二叉树  

int CreateBiTree(BiTNode **T)  

{  

    int ch;  

    scanf("%d",&ch);  

    if (ch == -1)  

    {  

        *T = NULL;  

        return 0;  

    }  

    else  

    {  

        *T = (BiTNode *)malloc(sizeof(BiTNode));  

        if (T == NULL)  

        {  

            printf("failed\n");  

            return 0;  

        }  

        else  

        {  

            (*T)->data = ch;  

            printf("输入%d的左子节点:",ch);  

            CreateBiTree(&((*T)->lChild));  

            printf("输入%d的右子节点:",ch);  

            CreateBiTree((&(*T)->rChild));  

        }  

    }  

  

    return 1;  

}  



//先序遍历二叉树  

void PreOrderBiTree(BiTNode *T)  

{  

    if (T == NULL)  

    {  

        return;  

    }  

    else  

    {  

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

        PreOrderBiTree(T->lChild);  

        PreOrderBiTree(T->rChild);  

    }  

}  



///中序遍历二叉树  

void MiddleOrderBiTree(BiTNode *T)  

{  

    if (T == NULL)  

    {  

        return;  

    }  

    else  

    {  

        MiddleOrderBiTree(T->lChild);  

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

        MiddleOrderBiTree(T->rChild);  

    }  

}  



//后续遍历二叉树  

void PostOrderBiTree(BiTNode *T)  

{  

    if (T == NULL)  

    {  

        return;  

    }  

    else  

    {  

        PostOrderBiTree(T->lChild);  

        PostOrderBiTree(T->rChild);  

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

    }  

}  



//二叉树的深度  

int TreeDeep(BiTNode *T)  

{  

    int deep = 0;  

    if (T != NULL)  

    {  

        int leftdeep = TreeDeep(T->lChild);  

        int rightdeep = TreeDeep(T->rChild);  

        deep = leftdeep >= rightdeep?leftdeep+1:rightdeep+1;  

    }  

  

    return deep;  

}  





//叶子节点个数  

int LeafCount(BiTNode *T)  

{  

    static int count;  

    if (T != NULL)  

    {  

        if (T->lChild == NULL && T->rChild == NULL)  

        {  

            count++;  

        }  

        LeafCount(T->lChild);  

        LeafCount(T->rChild);  

    }  

  

    return count;  

}  



//主函数  

int main(int argc,const char *argv[])  

{  

    BiTNode *T;  

    int depth,leafCount = 0;  

    printf("请输入第一个节点的值,-1表示没有叶节点:\n");  

    CreateBiTree(&T);  

  

    printf("先序遍历二叉树:");  

    PreOrderBiTree(T);  

    printf("\n");  

  

    printf("中序遍历二叉树:");  

    MiddleOrderBiTree(T);  

    printf("\n");  

  

    printf("后续遍历二叉树:");  

    PostOrderBiTree(T);  

    printf("\n");  

  

    depth = TreeDeep(T);  

    printf("树的深度为:%d\n",depth);  

      

    leafCount = LeafCount(T);  

    printf("叶子节点个数:%d\n",leafCount);  

  

    return 0;  

}  

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值