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

时间:2021-12-11 11:08:33
#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; 
}