二叉树 创建与输出 递归法实现

本文介绍了一种使用C语言实现二叉树的方法,包括二叉树的创建及先序、中序、后序遍历的过程。同时,还提供了一个求二叉树高度的递归算法。

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

#include<stdio.h>

#include <malloc.h>

typedef struct Node

{

       int data;

    struct Node *LChild;

    struct Node *RChild;

}BitNode,*BitTree;

 

/*先序创建二叉树*/

void CreatBiTree(BitTree *bt)

{

       char ch;

    ch=getchar();

    if(ch == '.') *bt = NULL;

       else

       {

              *bt = (BitTree)malloc(sizeof(BitNode));

        (*bt)->data = ch;

        CreatBiTree(&((*bt)->LChild));

        CreatBiTree(&((*bt)->RChild));

       }

}

 

 

void Visit(char ch)

{

       printf("%c  ",ch);

}

 

/*先序遍历二叉树*/

void  PreOrder(BitTree root)

{

       if (root != NULL)

       {

              Visit(root->data); 

        PreOrder(root->LChild); 

        PreOrder(root->RChild); 

       }

}

 

 

/*中序遍历二叉树*/

void  InOrder(BitTree root) 

{

       if (root != NULL)

       {

              InOrder(root->LChild);  

         Visit(root->data);      

        InOrder(root->RChild);  

       }

}

 

 

/* 后序遍历二叉树*/

void  PostOrder(BitTree root) 

{

       if(root != NULL)

       {

              PostOrder(root->LChild);

        PostOrder(root->RChild);

        Visit(root->data);      

       }

}

 

 

//后序遍历求二叉树的高度递归算法//

int PostTreeDepth(BitTree bt)  

{

       int hl,hr,max;

       if(bt != NULL)

       {

              hl = PostTreeDepth(bt->LChild);  //求左子树的深度

              hr = PostTreeDepth(bt->RChild);  //求右子树的深度

              max = hl>hr?hl:hr;              //得到左、右子树深度较大者

              return(max+1);               //返回树的深度

       }

       else return(0);              //如果是空树,则返回0

}

 

 

 

void main()

{

       BitTree T;

    int h;

    int layer;

    int treeleaf;

    layer=0;

    printf("请输入二叉树中的元素(以扩展先序遍历序列输入,其中.代表空子树):/n");

    CreatBiTree(&T);

    printf("先序遍历序列为:");

    PreOrder(T);

    printf("/n中序遍历序列为:");

    InOrder(T);

    printf("/n后序遍历序列为:");

   

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值