您的位置:首页 > 其它

动态二叉树后序和中序建树并层序遍历

2018-02-20 16:40 204 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐