二叉树(链表):先序中序后序遍历非递归形式

//
//  BTreeLink1.c
//  tree
//
//  二叉树(链表)(递归)
#include
#include
typedef struct BiTNode{
    char data;
    struct BiTNode *lchild,*rchild;
}BiTree;
//二叉树的先序遍历
void PreOrderTraverse(BiTree* T){
    if(T==NULL)
        return ;
    printf("%c ",T->data);
    PreOrderTraverse(T->lchild);
    PreOrderTraverse(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);
}

//创建一个二叉树
BiTree * CreateBiTree(){
    BiTree *T;
    char ch=0;
    printf("print ");
    scanf("%c",&ch);
    if(ch=='#'){
        T=NULL;
    }else{
        T = (BiTree*)malloc(sizeof(BiTree));
        T->data=ch;
        T->lchild = CreateBiTree();
        T->rchild = CreateBiTree();
    }
    return T;
}

void pri(){
    printf("\n");
}


int main(){
    BiTree * T;
    printf("输入树(#代表空节点 AB#C##D##):");
    T=CreateBiTree();
    printf("前序遍历的结果是:");
    PreOrderTraverse (T);
    printf("\n中序遍历的结果是:");
    InOrderTraverse(T);
    printf("\n后序遍历的结果是:");
    PostOrderTraverse(T);
    pri();
    return 0;
}

 

你可能感兴趣的:(数据结构C语言)