Sample Input:
8
12 11 20 17 1 15 8 5
12 20 17 11 15 8 5 1
Sample Output:
1 11 5 8 17 12 20 15
题解:
1.先用中序-后序构建二叉树,
2.设立stack<node*> odd
,表示将奇数层结点的孩子结点放入odd
中,先放右孩子,再放左孩子
3.设立stack<node*> even
,表示将偶数层结点的孩子结点放入even
中,先放左孩子,再放右孩子
4.根节为第1层(奇数层),将root
放入odd
中,访问root
,将root
的孩子放入even
中,之后对even
进行循环访问,将even
中每个结点的孩子放入odd
中。
5.循环交替访问odd
和even
,直到odd
和even
都为空
#include <iostream>
#include <stack>
using namespace std;
struct node{
int v;
node *lchild,*rchild;
};
int n,post[31],in[31];
stack<node*> odd,even;
void create(node* &root,int postL,int postR,int inL,int inR){
if(postL > postR){
return;
}
root = new node()