本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的前序遍历结果。
输入格式:
第一行给出正整数 n (≤30),是树中结点的个数。随后两行,每行给出 n 个整数,分别对应后序遍历和中序遍历结果,数字间以空格分隔。题目保证输入正确对应一棵二叉树。
输出格式:
在一行中输出Preorder:
以及该树的前序遍历结果。数字间有1个空格,行末不得有多余空格。
输入样例:
7
2 3 1 5 7 6 4
1 2 3 4 5 6 7
输出样例:
Preorder: 4 1 3 2 6 5 7
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
#include<iostream>
using namespace std;
typedef struct BinTree{
int data;
struct BinTree *Left;
struct BinTree *Right;
}*Bin;
Bin CreateTree(int *post,int *in,int n){
if(n<=0){
return NULL;
}
Bin T=new struct BinTree;
int r,*p;
r=*(post+n-1);
T->data=r;
for(p=in;p<in+n;p++){
if(*p==r){
break;
}
}int k;
k=p-in;
T->Left=CreateTree(post,in ,k);
T->Right=CreateTree(post+k,p+1,n-k-1);
return T;
}
void Preorder(Bin T){
if(T){
printf(" %d",T->data);
Preorder(T->Left);
Preorder(T->Right);
}
};
int main(){
Bin T;
int n;
int post[100],in[100];
cin>>n;
for(int i=0;i<n;i++){
cin>>post[i];
}
for(int i=0;i<n;i++){
cin>>in[i];
}
// for(int i=0;i<n;i++){
// cout<<post[i];
// }
// cout<<"\n";
// for(int i=0;i<n;i++){
// cout<<in[i];
// }
T=CreateTree(post,in, n);
cout<<"Preorder:";
Preorder(T);
}
这里放弃数组改用指针,要深刻理解一下指针的变换和递归