二叉树先序 中序 后序遍历

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

int index=1;
typedef char String[24];
String str;

/*=============用于构造二叉树(存储的数据)===============*/
void StrAssign(String str,char *chars){
    int i;
    for(i=1;i<=strlen(chars);i++)
        str[i]=*(chars+i-1);    
} 

/*==============创建二叉树结构============================*/
typedef struct BiTNode{
    char data;
    struct BiTNode *lchild,*rchild; 
}BiTNode,*BiTree; 

/*================按照前序输入二叉树中节点的值==================*/ 
void CreateBiTree(BiTree *T){
    char ch;
    ch=str[index++]; 
    if(ch=='#')
        *T=NULL;
    else{
        *T=(BiTree)malloc(sizeof(BiTNode));
        (*T)->data=ch;
        CreateBiTree(&(*T)->lchild);
        CreateBiTree(&(*T)->rchild);
    }
} 
/*=============返回T的深度===========*/
int BiTreeDepth(BiTree T){
    int i,j;
    if(!T)
        return 0;
    if(T->lchild)
        i=BiTreeDepth(T->lchild);
    else 
        i=0;
    if(T->rchild)
        j=BiTreeDepth(T->rchild);
    else
        j=0;
    return i>j?i+1:j+1;
} 
/*==============先序遍历二叉树========*/
void PreOederTraverse(BiTree T){
    if(T==NULL)
        return;
    printf("%c",T->data);
    PreOederTraverse(T->lchild);
    PreOederTraverse(T->rchild);
} 
/*=============中序遍历二叉树==============*/
void InOrderTraverse(BiTree T){
    if(T==NULL)
        return;
    InOrderTraverse(T->lchild);
    printf("%c",T->data);
    InOrderTraverse(T->rchild);
}
/*=============后序遍历二叉树==============*/
void PostOrderTraverse(BiTree T){
    if(T==NULL)
        return;
    PostOrderTraverse(T->lchild);
    PostOrderTraverse(T->rchild);
    printf("%c",T->data);
}
int main(){
    BiTree T;
    StrAssign(str,"ABDH#K###E##CFI###G#J##"); 
    CreateBiTree(&T);
    printf("先序遍历
");
    PreOederTraverse(T);
    printf("
中序遍历
");
    InOrderTraverse(T);
    printf("
后序遍历
");
    PostOrderTraverse(T);
    printf("
二叉树深度%d
",BiTreeDepth(T));
    return 0;
}
View Code

原文地址:https://www.cnblogs.com/sky-z/p/4644476.html