二叉樹(shù)的幾種遞歸

第三次更,已對(duì)
#include<stdio.h>
#include<stdlib.h>

typedef struct BiTreeNode{
    char data;
    struct BiTreeNode *lchild,*rchild;
}BiTreeNode,*BiTree;

void  Create(BiTree &T)
{
    char ch;
    ch=getchar();
    if(ch=='.'){
        T=NULL;
    }    
    else{
        T=(BiTree)malloc(sizeof(BiTreeNode));
        T->data=ch;
        Create(T->lchild);
        Create(T->rchild);
    }
}
void PreOrder_1(BiTree T)
{
    if(T!=NULL){
        printf("%c",T->data);
        PreOrder_1(T->lchild);
        PreOrder_1(T->rchild);
    }
}
void PreOrder_2(BiTree T)
{
    BiTree p;
    BiTree S[100];
    int top=0;
    S[top]=T;
    while(top!=-1){
        p=S[top];
        top--;
        printf("%c",p->data);
        if(p->rchild) S[++top]=p->rchild;
        if(p->lchild) S[++top]=p->lchild;
    }
}
void InOrder_1(BiTree T)
{
    if(T){
        InOrder_1(T->lchild);
        printf("%c",T->data );
        InOrder_1(T->rchild);
    }
}
void InOrder_2(BiTree T)
{
    BiTree S[100],p;
    int top=0;
    S[top]=T;
    while (top!=-1){
        while(p=S[top]){
            S[++top]=p->lchild;
        }
        top--;
        if(top!=-1){
            p=S[top--];
            printf("%c",p->data);
            S[++top]=p->rchild;
        }
    }
}
void InOrder_3(BiTree T)
{
    BiTree S[100],p=T;
    int top=-1;
    while(top!=-1||p){
        if(p){
            S[++top]=p;
            p=p->lchild;
        }
        else{
            p=S[top--];
            printf("%c",p->data);
            p=p->rchild;
        }
    }
}
void PostOrder_1(BiTree T)
{
    if(T){
        PostOrder_1(T->lchild);
        PostOrder_1(T->rchild);
        printf("%c",T->data);
    }
}
void PostOrder_2(BiTree T)
{
    typedef struct{
        BiTree ptr;
        int mark;
    }Stack;
    Stack S[100];
    int top=0;
    for(int i=0;i<100;i++)
    {
        S[i].ptr=NULL;
        S[i].mark=0;
    }
    Stack p;
    S[top].ptr=T;
    while(top!=-1){
        p=S[top--];
        switch (p.mark){
            case 0: 
            p.mark=1;
            S[++top]=p;
            if(p.ptr->lchild){
                p.ptr=p.ptr->lchild;
                p.mark=0;
                S[++top]=p;
            }
            break;
            case 1:
            p.mark=2;
            S[++top]=p;
            if(p.ptr->rchild){
                p.ptr=p.ptr->rchild;
                p.mark=0;
                S[++top]=p;
            }
            break;
            case 2:
            printf("%c",p.ptr->data);
        }
    }
}
 
void LayerOrder(BiTree T)
{
    BiTree p;
    BiTree Q[100];
    int front,rear=front=0;
    Q[rear++]=T;
    while (front!=rear){
        p=Q[front++];
        printf("%c",p->data);
        if(p->lchild)  Q[rear++]=p->lchild;
        if(p->rchild)  Q[rear++]=p->rchild;
    }
}
void PostFree(BiTree &T)
{
    if(T)
    {
        PostFree(T->lchild);
        PostFree(T->rchild);
        printf("%c",T->data);
        free(T);
    }
}
void InFree(BiTree &T)
{
    if(T){
        InFree(T->lchild);
        BiTree p;
        p=T->rchild;
        printf("%c",T->data);
        free(T);
        InFree(p);
    }
}
void PreFree(BiTree &T)
{
    if(T){
        BiTree l=T->lchild,r=T->rchild;
        printf("%c",T->data);
        free(T);
        PreFree(l);
        PreFree(r);
    }
}
int main()
{
    BiTree T;
    Create(T);
    printf("the PreOrder_1:\n");
    PreOrder_1(T);
    printf("\n"); 
    printf("the PreOrder_2:\n");
    PreOrder_2(T);
    printf("\n"); 
    printf("the InOrder_1:\n");
    InOrder_1(T);
    printf("\n"); 
    printf("the InOrder_2:\n");
    InOrder_2(T);
    printf("\n"); 
    printf("the InOrder_3:\n");
    InOrder_3(T);
    printf("\n"); 
    printf("the PostOrder_1:\n");
    PostOrder_1(T);
    printf("\n"); 
    printf("the PostOrder_2:\n");
    PostOrder_2(T);
    printf("\n"); 
    printf("the LayerOrder:\n");
    LayerOrder(T);
    printf("\n"); 
    PreFree(T);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容