1020. Tree Traversals

来源:互联网 发布:mac安装adobe flash 编辑:程序博客网 时间:2024/05/18 19:37

遵循分治法来写就能过

#include<iostream>#include<queue>#include<algorithm>using namespace std;const int N=35;int A[N],B[N],n;struct node{  int val;  node*lch,*rch;  node(int k):val(k){lch=rch=nullptr;}};// A[i ..j] B[m .. n]void build(node*&p,int i,int j,int m,int n){  if(i>j)return;  p=new node(A[j]);  int mid=find(B,B+n,A[j])-B;    build(p->lch,i ,i+mid-1-m , m, mid-1);  build(p->rch,i+mid-m ,j-1, mid+1, n);}int main(){  cin>>n;  for(int i=0;i<n;++i)cin>>A[i];  for(int i=0;i<n;++i)cin>>B[i];  node*root;  build(root,0,n-1,0,n-1);  queue<node*>que;  que.push(root);  bool first=true;  while(!que.empty()){    if(first)first=false;    else cout<<' ';    auto p=que.front();    cout<<p->val;    if(p->lch) que.push(p->lch);    if(p->rch) que.push(p->rch);    que.pop();  }//while}



0 0
原创粉丝点击