已知二叉树的先序、中序遍历序列,求其后序遍历结果。(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; }
相关文章推荐
- 已知一颗二叉树,如果先序遍历的节点顺序是:ADCEFGHB,中序遍历是,CDFEGHAB,则后序遍历的结果为
- 二叉树系列(二):已知中序遍历序列和后序遍历序列,求先序遍历序列
- 已知二叉树后序遍历序列是DBCEFGHA,中序遍历序列EDCBAHFG,它的前序遍历的序列是?麻烦再画下这二叉树.
- pat L2-006-已知二叉树的后序序列和中序序列求层序遍历结果
- [c++]已知二叉树的前序遍历与中序遍历结果(二叉树中不含重复数字),重构二叉树
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- 根据二叉树的先序和中序遍历,求出其后序遍历序列
- 已知二叉树的先序遍历序列和中序遍历序列,输出该二叉树的后序遍历序列
- 已知二叉树的前序与中序遍历序列,求重建后的二叉树(即是二叉树的重建)
- 已知两种遍历序列求原始二叉树
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
- 已知二叉树的先序遍历和中序遍历序列求后序遍历序列
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- 已知二叉树的中序遍历和后序遍历,如何求前序遍历
- 二叉树面试题--已知二叉树的两种遍历序列,求出另一种遍历序列
- 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,
- 已知二叉树的先序(前序)遍历及中序遍历,还原该二叉树并输出其后续遍历
- 已知二叉树的先序,中序遍历,求后续遍历
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- 已知一颗二叉树S的前序遍历和中序遍历序列,请编程输出二叉树S的后续遍历序列。