数据结构 二叉树的递归建立和递归遍历

先序建立  中序建立  后序建立

先序遍历  中序遍历  后序遍历

求树的深度

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
typedef struct node{
    char ch;
    struct node *Lchild;
    struct node *Rchild;
}BiTNode,*BiTree;
void Q_CreatTree(BiTree *T);
void Z_CreatTree(BiTree *T);
void H_CreatTree(BiTree *T);

void Q_Traverse(BiTree T);
void Z_Traverse(BiTree T);
void H_Traverse(BiTree T);
int TreeDeep(BiTree T);
int main(void)
{
    BiTree T;
    Q_CreatTree(&T);
    //Z_CreatTree(&T);
    //H_CreatTree(&T);
     
    Q_Traverse(T);
       printf("\n");
    Z_Traverse(T);
       printf("\n");
    H_Traverse(T);
       printf("\n");
    printf("树的深度:%d\n",TreeDeep(T));
}
void Q_CreatTree(BiTree *T)//前序遍历建立二叉树 
{
    char a;
    a=getchar();
    if(a=='^')
    {
        *T=NULL;
    }
    else
    {
        *T=(BiTree)malloc(sizeof(BiTNode));
        (*T)->ch=a;
        Q_CreatTree( &( (*T)->Lchild ) );
        Q_CreatTree( &( (*T)->Rchild ) );
    }
}
void Z_CreatTree(BiTree *T)//中序遍历建立二叉树 
{
    char a;
    a=getchar();
    if(a=='#')
    {
        *T=NULL;
    }
    else
    {
        *T=(BiTree)malloc(sizeof(BiTNode));
        Z_CreatTree( &( (*T)->Lchild ) );
        (*T)->ch=a;
        Z_CreatTree( &( (*T)->Rchild ) );
    }
}
void H_CreatTree(BiTree *T)//后序遍历建立二叉树 
{
    char a;
    a=getchar();
    if(a=='#')
    {
        *T=NULL;
    }
    else
    {
        *T=(BiTree)malloc(sizeof(BiTNode));
        H_CreatTree( &( (*T)->Lchild ) );
        H_CreatTree( &( (*T)->Rchild ) );
        (*T)->ch=a;
    }
}
void Q_Traverse(BiTree T)//前序遍历二叉树 
{
    if(T)
    {
        printf("%c",T->ch);
        Q_Traverse(T->Lchild);
        Q_Traverse(T->Rchild);
    }
}
void Z_Traverse(BiTree T)//中序遍历二叉树 
{
    if(T)
    {
        Z_Traverse(T->Lchild);
        printf("%c",T->ch);
        Z_Traverse(T->Rchild);
    }
}
void H_Traverse(BiTree T)//后序遍历二叉树 
{
    if(T)
    {
        H_Traverse(T->Lchild);
        H_Traverse(T->Rchild);
        printf("%c",T->ch);
         
    }
}
int TreeDeep(BiTree T)//求树的深度
{
    int n=0;
    if(T)
    {
        int L=TreeDeep(T->Lchild);
        int R=TreeDeep(T->Rchild);
        n=L+1>R+1?L+1:R+1;
    }
    return n;
 } 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1900_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值