usaco American Heritage

這道題可以用來練習編碼!

代碼如下:

/*
ID: guo geer
PROG: heritage
LANG: C++
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<fstream>
using namespace std;

struct Node
{
       char v;
       Node *left;
       Node *right;
};

int len;
char pre[30], in[30];
Node *head = new Node;
int strIndex(int startIndex, int endIndex, char obj)
{
    for(int i=startIndex; i<=endIndex; i++)
    if(in[i] == obj) return i;
}
void buildTree(Node *&h, int a, int b, int m, int n)
{
     if(a > b || m > n) return;
     h = new Node;
     h->v = pre[m];
     h->left = NULL;
     h->right = NULL;
     //printf("%d %d %d %d %c" ,a, b, m, n, h->v);
     //system("pause");
     int index = strIndex(a, b, pre[m]);
     buildTree(h->left, a, index-1, m+1, m+index-a);
     buildTree(h->right, index+1, b, m+index-a+1, n);
}

void postOrder(Node *h)
{
     if(h == NULL) return;
     postOrder(h->left);
     postOrder(h->right);
     printf("%c", h->v);
}

int main()
{
    freopen("heritage.in", "r", stdin);
    freopen("heritage.out", "w", stdout);
    while(scanf(" %s", in) == 1)
    {
           scanf(" %s", pre);
           len = strlen(in);
           buildTree(head, 0, len-1, 0, len-1);
           postOrder(head);
           printf("\n");
    }
    return 0;
}


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