欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

1086 Tree Traversals Again (25分)

程序员文章站 2022-03-18 11:21:45
...

1086 Tree Traversals Again (25分)

#include<stdio.h>
#include<stack>
#include<cstring>
#include<algorithm>
using namespace std;
int n;
int in[50], pre[50];
struct node {
    int data;
    node* lchild;
    node* rchild;
};
node* create(int preL, int preR, int inL, int inR){
    if(preL > preR) return NULL;
    node* root = new node;
    root->data = pre[preL];
    int k;
    for(k = inL; k <= inR; k++){
        if(in[k] == pre[preL]){
            break;
        }
    }
    int numleft = k-inL;
    root->lchild = create(preL+1, preL+numleft, inL, k-1);
    root->rchild = create(preL+numleft+1, preR, k+1, inR);
    return root;
}
int num = 0;
void postorder(node* root){
    if(root == NULL){
        return;
    }
    postorder(root->lchild);
    postorder(root->rchild);
    printf("%d", root->data);
    num++;
    if(num < n) printf(" ");
}
int main(){
    scanf("%d", &n);
    char str[5];
    stack<int> st;
    int x, preindex = 0, inindex = 0;
    for(int i = 0; i < 2 * n; i++){
        scanf("%s", str);
        if(strcmp(str, "Push") == 0){
            scanf("%d", &x);
            pre[preindex++] = x;
            st.push(x);
        } else {
            in[inindex++] = st.top();
            st.pop();
        }
    }
   node* root = create(0, n - 1, 0, n - 1);
   postorder(root);
   return 0;
}

第一次,1h
int k;
for(int k = inL; k <= inR; k++) { //报错
if(in[k] == pre[preL]){
break;
}
}
k重新定义发现错误