7-1 树的遍历 (25 分)

it2022-05-05  194

欢迎来到代码的世界

7-1 树的遍历 (25 分)

题目 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。

输入格式 输入第一行给出一个正整数N(≤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<bits/stdc++.h> using namespace std; int order[31]; int post[31]; struct node{ int data; struct node *left; struct node *right; }; typedef struct node Node,*BiTree; BiTree build(int *order,int *post,int n) { if(n<=0)return NULL; int *p=order; while(p) { if(*p==*(post+n-1))break; p++; } BiTree T=new Node; T->data=*p; int len=p-order; T->left=build(order,post,len); T->right=build(p+1,post+len,n-1-len); return T; } void pre(BiTree T) { if(T) { cout<<" "<<T->data; pre(T->left); pre(T->right); } } void Leve(BiTree BT){//层次遍历 BiTree p; BiTree q[55]; int f=0,r=0; if(BT){ q[r++]=BT; while(f!=r) { if(f!=0)cout<<" "; p=q[f++]; cout<<p->data; if(p->left)q[r++]=p->left; if(p->right)q[r++]=p->right; } } } int main() { int n; BiTree T; cin>>n; for(int i=0;i<n;i++) cin>>post[i]; for(int i=0;i<n;i++) cin>>order[i]; T=build(order,post,n); // cout<<"Preorder:"; // pre(T); // cout<<" leave:"; Leve(T); return 0; }

最新回复(0)