#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;
}
动态二叉树后序和中序建树并层序遍历
最新推荐文章于 2023-01-08 11:37:21 发布