1086 Tree Traversals Again (25分)
程序员文章站
2022-03-18 11:21:45
...
#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重新定义发现错误
推荐阅读
-
1086 Tree Traversals Again (25 分)(二叉树的遍历)
-
pat 1086 Tree Traversals Again
-
PATA 1086 Tree Traversals Again
-
浙大数据结构习题笔记:03-树3 Tree Traversals Again (25分)
-
【MOOC】03-树3 Tree Traversals Again (25分)
-
C语言 03-树3 Tree Traversals Again
-
【PAT】A1086 Tree Traversals Again (25分)
-
1086 Tree Traversals Again
-
PAT甲级1086 Tree Traversals Again (25分)|C++实现
-
1086. Tree Traversals Again (25)