赞
踩
给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。
输入第一行给出一个正整数NNN(≤30\le 30≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。
在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。
- 7
- 2 3 1 5 7 6 4
- 1 2 3 4 5 6 7
4 1 6 3 5 7 2
- #include<iostream>
- #include<queue>
- #include<stdlib.h>
- using namespace std;
- int btree[100]={0};
- int ctree[100]={0};
- #define SizeMax 105
- struct Node{
- Node *l;
- Node *r;
- int data;
- };
- int num=0;
- int n;
- Node * createTree(int btree[],int ctree[],int n)
- {
- if(n<=0)return NULL;
- //cout<<"12345"<<endl;
- Node *T;
- int ori=btree[n-1];//找到跟节点
- int k;
- T=(Node*)malloc(sizeof(Node));
- T->data=ori;
- for(int i=0;i<n;i++)//中序遍历左右分离
- {
- if(ctree[i]==ori)
- {
- k=i;break;
- }
- }
- T->l= createTree(btree,ctree,k);
- T->r=createTree(btree+k,ctree+k+1,n-k-1);
- return T;
- }
- void Print(Node *r)
- {
- Node *p;
- Node *pr[SizeMax];
- int rear=-1,front=-1;
- rear++;
- pr[rear]=r;
- while(rear!=front)
- {
- front=(front+1);
- p=pr[front];
- cout<<p->data;
- num++;
- if(num<n)
- cout<<" ";
- if(p->l!=NULL)
- {
- rear=(rear+1);
- pr[rear]=p->l;
- }
- if(p->r!=NULL)
- {
- rear=(rear+1);
- pr[rear]=p->r;
- }
- }
- }
- int main(){
-
- cin>>n;
- for(int i=0;i<n;i++)
- cin>>btree[i];
- for(int i=0;i<n;i++)
- cin>>ctree[i];
- Node *T=createTree(btree,ctree,n);
- Print(T);
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。