您的位置:首页 > 其它

已知二叉树的先序、中序遍历序列,求其后序遍历结果。(hduoj1710)

2012-05-11 21:56 856 查看
#include <iostream>
#include<cstring>
using namespace std;

struct Node
{
int data;
Node* lChild;
Node* rChild;
};

int find(int iVal, int* inOrder,int s, int e)
{
for(int i=s; i<=e; i++)
if(iVal == inOrder[i])
return i;
return 0;
}

Node* reBuildTree(int* preOrder,int s1,int e1,int* inOrder,int s2,int e2)
{
if(preOrder == NULL || s1 > e1 || inOrder == NULL || s2 > e2)
return NULL;
int data = preOrder[s1];
int index = find(data, inOrder, s2,e2);
Node* root = new Node;
root->data = data;
root->lChild = reBuildTree(preOrder,s1+1,s1+index-s2,inOrder,s2,index);
root->rChild = reBuildTree(preOrder,s1+index-s2+1,e1,inOrder,index+1,e2);
return root;
}

bool flag = true;

void postOrderTravel(Node* root)
{
if(root)
{
if(root->lChild)
postOrderTravel(root->lChild);
if(root->rChild)
postOrderTravel(root->rChild);
if(flag)
{
cout<<root->data;
flag = false;
}
else
{
cout<<" "<<root->data;
}
}
}

int main()
{
int n,i;
int pre[1000],in[1000];
while(cin>>n)
{
flag = true;
for( i=0; i<n; i++)
cin>>pre[i];
for( i=0; i<n; i++)
cin>>in[i];
Node* root = reBuildTree(pre,0,n-1,in,0,n-1);
postOrderTravel(root);
cout<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐