数据结构(二叉树系列)先序创建三种遍历和求深度(递归实现)

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


typedef struct BiTNode{ // 二叉树结点结构  
    char data;            // 结点数据  
    struct BiTNode *lchild;        // 左孩子  
    struct BiTNode *rchild;        // 右孩子  
}BiTNode,*BiTree;  


BiTree CreateBiTree(BiTree T);
void TraversalBiTree1(BiTree T);
void TraversalBiTree2(BiTree T);
void TraversalBiTree3(BiTree T);
int Deep(BiTree T);


int main(void)
{ BiTree T=NULL;
T=CreateBiTree(T);
printf("先序遍历:\n");
TraversalBiTree1(T);
printf("\n");
printf("中序遍历:\n");
TraversalBiTree2(T);
printf("\n");
printf("后序遍历:\n");
TraversalBiTree3(T);
printf("\n");
printf("树的深度:%d",Deep(T));

return 0;
}


BiTree CreateBiTree( BiTree T)//先序递归创建
{
    char ch;  
    scanf("%c",&ch);  
    if(ch=='#') T=NULL;  
    else{  
        if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))  
            exit(-1);  
        
T->data=ch;                    // 生成根节点  
T->lchild=CreateBiTree(T->lchild);// 构造左子树  
T->rchild=CreateBiTree(T->rchild);// 构造右子树  
    }  
    return T;  
}


void TraversalBiTree1( BiTree T)//先序遍历
{
if(T == NULL)
return;
printf("%c ",T->data);
TraversalBiTree1(T->lchild);
TraversalBiTree1(T->rchild);

}


void TraversalBiTree2( BiTree T)//中序遍历
{
if(T == NULL)
return;
TraversalBiTree2(T->lchild);
printf("%c ",T->data);
TraversalBiTree2(T->rchild);

}


void TraversalBiTree3( BiTree T)//后序遍历
{
if(T == NULL)
return;
TraversalBiTree3(T->lchild);
TraversalBiTree3(T->rchild);
printf("%c ",T->data);


}


int Deep(BiTree T)//求深度
{
int lchild,rchild;
if(T == NULL)
return 0;
lchild = 1 + Deep(T->lchild);
rchild = 1 + Deep(T->rchild);
return lchild>rchild?lchild:rchild; 
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值