二叉樹 二叉樹帶虛結點表示的先序遍歷可以確定唯一一顆二叉樹

二叉樹模版變形

#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<queue>
using namespace std;
typedef struct BiTNode{
    char data;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
int z=0;                                //***
int CreateBiTree(BiTree &T,char *m)
{
    char data;
    data=*(m+z);
    z++;                            //***
    if(data=='#')
        T=NULL;
    else
    {
        T=(BiTree)malloc(sizeof(BiTNode));
        T->data=data;
        CreateBiTree(T->lchild,m); //*
        CreateBiTree(T->rchild,m);
    }
    return 0;
}
void Visit(BiTree T)
{
    if(T->data!='#')
        printf("%c",T->data);
}
void InOrder(BiTree T)
{
    if(T!=NULL)
    {
        InOrder(T->lchild);
        Visit(T);
        InOrder(T->rchild);
    }

}
void PostOrder(BiTree T)
{
    if(T!=NULL)
    {
        PostOrder(T->lchild);
        PostOrder(T->rchild);
        Visit(T);
    }
}
void LevelOrder(BiTree T)
{
    BiTree p=T;
    queue<BiTree> que;
    que.push(p);
    while(que.empty()!=1)
    {
        p=que.front();
        printf("%c",p->data);
        que.pop();
        if(p->lchild!=NULL)
            que.push(p->lchild);
        if(p->rchild!=NULL)
            que.push(p->rchild);
    }
}
int main()
{
    BiTree T;
    char s[2050];
    int i,len;
    while(gets(s)!=NULL)
    {
        len=strlen(s);
        for(i=0;i<=len-1;i++)
            if(s[i]!='#')
                break;
        if(i==len){
            printf("\n");
            continue;
        }
        CreateBiTree(T,s);
        InOrder(T);
        printf("%c",32);
        PostOrder(T);
        printf("%c",32);
        LevelOrder(T);
        printf("\n");
        z=0;                //***
    }
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章