03-树3 Tree Traversals Again

来源:互联网 发布:暗黑黎明挂机软件 编辑:程序博客网 时间:2024/04/30 18:16

根据题目:
入栈的顺序即为先序遍历的顺序
出栈的顺序即为中序遍历的顺序
然后根据先序遍历、中序遍历来构建二叉树

AC代码

#include<iostream>#include<stdlib.h>#include<stdio.h>#include<string>#include<stack>using namespace std;typedef struct TreeNode *BinTree;struct TreeNode{    int data;    BinTree Left;    BinTree Right;};int flag = 1;BinTree CreateBinTree(int *Pre,int *In,int Len){    BinTree T;    int i;    if(!Len)        return NULL;    T = (BinTree)malloc(sizeof(struct TreeNode));    T->data = Pre[0];    for(i=0;i<Len;i++)        if(Pre[0] == In[i])            break;    T->Left = CreateBinTree(Pre+1,In,i);    T->Right = CreateBinTree(Pre+i+1,In+i+1,Len-i-1);    return T;}void PostOrderPrint(BinTree BT){    if(BT){        PostOrderPrint(BT->Left);        PostOrderPrint(BT->Right);        if(flag){            flag = 0;            printf("%d",BT->data);        }        else            printf(" %d",BT->data);    }}int main(){    int PreOrder[30]={0};    int InOrder[30]={0};    int PostOrder[30]={0};    int N,data;    int PreIndex = 0,InIndex = 0,PostIndex = 0;    stack<int> inputstack;    scanf("%d",&N);    string str;    for(int i=0;i<2*N;i++)    {        cin>>str;        if(str == "Push"){            scanf("%d",&data);            PreOrder[PreIndex++] = data;            inputstack.push(data);        }        else if(str == "Pop"){            InOrder[InIndex++] = inputstack.top();            inputstack.pop();        }    }//  for(int i=0;i<N;i++)//      printf("%d ",PreOrder[i]);//  printf("\n");//  for(int i=0;i<N;i++)//      printf("%d ",InOrder[i]);    BinTree T = NULL;    T = CreateBinTree(PreOrder,InOrder,N);    PostOrderPrint(T);    printf("\n");    return 0;}
0 0
原创粉丝点击