pat 1020 Tree Traversals

来源:互联网 发布:access2007制作数据库 编辑:程序博客网 时间:2024/05/16 13:45

已知二叉树后序和中序,求层次顺序。需要重点参考。

#include<iostream>#include<vector>#include<queue>using namespace std;struct node{int value;node *left,*right;};vector<int> inOrder,post,ans;queue<node *> outOrder;node * getParent(int start,int end){int i,index=-1;node *pa=new node;pa->left=NULL;pa->right=NULL;pa->value=post[post.size()-1];//找到后序中的根结点for(i=start;i<=end;i++){if(pa->value==inOrder[i]){//找到根结点对应的中序下标index=i;break;}}if(index==end){   //处理右结点的情况pa->right=NULL;} else if(index<end){post.pop_back();pa->right=getParent(index+1,end);}if(index==start){  //处理左结点的情况pa->left=NULL;} else if(index>start){post.pop_back();pa->left=getParent(start,index-1);}return pa;}void printLevelOrder(node *p)//层次遍历,借助队列outOrder{outOrder.push(p);while(outOrder.size()>0){node* t=outOrder.front();outOrder.pop();ans.push_back(t->value);if(t->left!=NULL)outOrder.push(t->left);if(t->right!=NULL)outOrder.push(t->right);}}int main(){int n,i,temp;node *parent;freopen("C:\\Documents and Settings\\Administrator\\桌面\\input.txt","r",stdin);cin>>n;for(i=0;i<n;i++){cin>>temp;post.push_back(temp);}for(i=0;i<n;i++){cin>>temp;inOrder.push_back(temp);}parent=getParent(0,n-1);printLevelOrder(parent);for(i=0;i<ans.size();i++){cout<<ans[i];if(i!=ans.size()-1)cout<<" ";}return 0;}