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

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

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

求树的深度

#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;
 } 

猜你喜欢

转载自blog.csdn.net/holly_z_p_f/article/details/79859029