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

来源:互联网 发布:对外汉语教师网络兼职 编辑:程序博客网 时间:2024/05/22 05:34
#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;}