Recursive establishment and recursive traversal of data structure binary tree

Pre-order build Mid-order build Post-order build

Preorder traversal Inorder traversal Postorder traversal

find the depth of the tree

#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("Depth of tree: %d\n",TreeDeep(T));
}
void Q_CreatTree(BiTree *T)//Preorder traversal to build a binary tree
{
    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)//Inorder traversal to create a binary tree
{
    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)//Post-order traversal to create a binary tree
{
    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)//Preorder traversal of binary tree
{
    if(T)
    {
        printf("%c",T->ch);
        Q_Traverse(T->Lchild);
        Q_Traverse(T->Rchild);
    }
}
void Z_Traverse(BiTree T)//Inorder traversal of binary tree
{
    if(T)
    {
        Z_Traverse(T->Lchild);
        printf("%c",T->ch);
        Z_Traverse(T->Rchild);
    }
}
void H_Traverse(BiTree T)//Post-order traversal of binary tree
{
    if(T)
    {
        H_Traverse(T->Lchild);
        H_Traverse(T->Rchild);
        printf("%c",T->ch);
         
    }
}
int TreeDeep(BiTree T)//Seek the depth of the tree
{
    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;
 }

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325446501&siteId=291194637