题意:根据后序遍历和中序遍历建立二叉树,输出二叉树的层次遍历
#include <iostream>
#include <queue>
using namespace std;
int postOrder[31];
int inOrder[31];
struct Node
{
int num;
struct Node *lchild, *rchild;
};
Node *build(int l1, int r1, int l2, int r2)
{
Node *root = (Node*)malloc(sizeof(Node));
root->lchild = root->rchild = NULL;
root->num = postOrder[r1];
int i;
for(i = l2; i <= r2; i++)
if(inOrder[i] == root->num)
break;
if(i != l2) //左子树不为空
root->lchild = build(l1, l1+i-l2-1, l2, i-1);
if(i != r2) //右子树不为空
root->rchild = build(l1+i-l2, r1-1, i+1, r2);
return root;
}
void leOrder(Node *root)
{
queue<Node*> q;
q.push(root);
while(!q.empty())
{
Node *tmp = q.front();
q.pop();
if(tmp == root)
cout << tmp->num;
else
cout << " " << tmp->num;
if(tmp->lchild)
q.push(tmp->lchild);
if(tmp->rchild)
q.push(tmp->rchild);
}
cout << endl;
}
int main()
{
int n;
while(cin >> n)
{
for(int i = 0; i < n; i++)
cin >> postOrder[i];
for(int i = 0; i < n; i++)
cin >> inOrder[i];
Node *root = build(0, n-1, 0, n-1);
leOrder(root);
}
return 0;
}