题目:http://acm.hdu.edu.cn/showproblem.php?pid=1710
大意:给出一个二叉树的前序和中序,求其后序遍历
ps:1.在写链表时,需要写明typedef struct node{};即声明一个指向自己的数据类型,而不是直接写struct node{}
2.采用分治的思想,把一颗二叉树分解成n棵二叉树,每棵都有其对应的根节点,利用这点进行遍历
3.malloc在#include<stdlib.h>头文件中
4.这是自己第一次写数据结构树型题目,所以代码是借鉴而来的
#include<iostream>
#include<stdio.h>
#include<stdlib.h> using namespace std; typedef struct node{
node *l,*r;
int num;
}tree; tree *root; tree *creat(int *a,int *b,int n){
tree *t;
for(int i=;i<n;i++){
if(a[] == b[i]){//找到根节点
t = (tree *)malloc(sizeof(tree));
t->num = b[i];
t->l = creat(a+,b,i);
t->r = creat(a+i+,b+i+,n-i-);
return t;
}
}
return NULL;
} void houxu(tree *h){
if(h!=NULL){
houxu(h->l);
houxu(h->r);
if(h == root)
cout<<h->num<<endl; //最后是根节点
else
cout<<h->num<<" ";
}
return ;
} int main(){
int n;
int a[],b[];
while(cin>>n){
for(int i=;i<n;i++)
scanf("%d",a+i);
for(int i=;i<n;i++)
scanf("%d",b+i);
root = creat(a,b,n);
tree *h = root;
houxu(h);
}
return ;
}