#include <stdio.h>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
int t1[1000],t2[1000],count1=1;
typedef struct Tree_node{
int data;
struct Tree_node *lchild, *rchild;
}Tnode,*Tree;
void PTree_H(Tree T){
if(T)
{
PTree_H(T->lchild);
PTree_H(T->rchild);
if(count1) cout<<T->data,count1=0;
else cout<<" "<<T->data;
}
}
void Built(int i, int j, int i1 , int j1, Tree &T){ // i j , i1 j1 是两数组的起始下标和结尾下标 通过不断更新它们的范围来判断是否有左右子树
int r;
for(int k = i1; k <=j1; k++){
if(t1[i] == t2[k])
{
r = k;
break;
}
}
T = new Tnode; //分配空间
T->data = t2[r];
int l = r - i1; // 此根节点的左子树的剩余节点数
if(l>0) // 如果有左子树
Built(i+1,j,i1,r-1,T->lchild); // i+1移至下一个根节点,并将j1移至r-1
else T->lchild=NULL;
if(r<j1) // 如果有右子树
Built(i+l+1,j,r+1,j1,T->rchild);//i+l+1,移至当前节点的右子树节点,将j移至r+1
else T->rchild=NULL;
return ;
}
int main()
{
int a;
while(cin>>a){
count1 = 1;
for(int i = 0; i < a; i++)
cin>>t1[i];
for(int i = 0; i < a; i++)
cin>>t2[i];
for(int i = 0;i < a; i++){
}
Tree T;
Built(0, a-1, 0, a-1, T);
PTree_H(T);
cout<<endl;
}
return 0;
}
模板-根据先序遍历和中序遍历建立二叉树- HDU-1710-Binary Tree Traversals
猜你喜欢
转载自blog.csdn.net/GD_ONE/article/details/98313395
今日推荐
周排行