動態二叉樹後序和中序建樹並層序遍歷
阿新 • • 發佈:2019-01-26
#include<stdio.h> #include<queue> //給出後序和中序求層序 using namespace std; int ins[31],posts[31],n; struct Node{ int data; Node *lchild; Node *rchild; }; void Layer(Node *root){//保證輸出時沒有空格 int num=0; queue<Node*> q; q.push(root); while(!q.empty()){ Node *temp=q.front(); num++; printf("%d",temp->data); if(num!=n) printf(" "); q.pop(); if(temp->lchild) q.push(temp->lchild); if(temp->rchild) q.push(temp->rchild); } } Node *create(int postL,int postR,int inL,int inR){//記住一定要有返回值 if(postL>postR) return NULL; Node *root=new Node; root->data=posts[postR]; int i; for(i=inL;i<=inR;i++) if(ins[i]==posts[postR]) break; int left=i-inL; root->lchild=create(postL,postL+left-1,inL,i-1); root->rchild=create(postL+left,postR-1,i+1,inR); return root; } int main(){ scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&posts[i]); for(int i=0;i<n;i++) scanf("%d",&ins[i]); Node *root=create(0,n-1,0,n-1); Layer(root); return 0; }