L2-011. 玩转二叉树
已知二叉树的中序遍历和前序遍历,求出它反转后的层序遍历
反转的意思就是将这棵树的左子树和右子树调换位置输出,这题给的是中序遍历和前序遍历,其他和L2-006一样。
/* 7 1 2 3 4 5 6 7 4 1 3 2 6 5 7 * 4 6 1 7 5 3 2 */
#include<iostream>
#include<stdlib.h>
using namespace std;
typedef struct node
{
struct node *left;
struct node *right;
int data;
}Node;
Node *binarytree(int a[],int b[],int len)
{
int i;
if (len==0)
return NULL;
Node *q;
q=(Node *)malloc(sizeof(Node));
q->data=a[0];
for (i=0;i<len;i++)
{
if (b[i]==a[0])
break;
}
q->left=binarytree(a+1,b,i);
q->right=binarytree(a+i+1,b+i+1,len-1-i);
return q;
}
int main()
{
int n,i;
cin>>n;
int pre[n],mid[n];
for (i=0;i<n;i++)
cin>>mid[i];
for (i=0;i<n;i++)
cin>>pre[i];
Node *que[n];
int head=0,tail=0;
que[tail++]=binarytree(pre,mid,n);
while (head<tail)
{
cout<<que[head]->data;
if (head!=n-1)
cout<<" ";
if (que[head]->right!=NULL)
que[tail++]=que[head]->right;
if (que[head]->left!=NULL)
que[tail++]=que[head]->left;
head++;
}
}