/*
题目:层次遍历和中序遍历构建二叉树
算法思想:InOrder, LevelOrder 分别存储中序序列和层变遍历序列,用cnt1记录层次遍历序列插入结点的下标,[low, high]为插入结点在中序序列的范围,插入LevelOrder[cnt1]
找到LevelOrder[cnt1](层次遍历序列结点)在[low, high](中序序列)具体位置 mid
若 mid > low 则根据[low, mid - 1]和LevelOrder[cnt1 + 1] 继续插入
若 mid < high 则根据 [mid + 1, high] 和 LevelOrder[cnt1 + 2](存在左兄弟,左兄弟占用LevelOrder[cnt1 + 1);
或LevelOrder[cnt1 + 1](不存在左兄弟)继续插入
*/
#include <cstdio>
#include <queue>
using namespace std;
typedef struct BNode //二叉树结点
{
int data;
struct BNode *lchild, *rchild;
}BNode;
typedef struct infor //插入时需要的信息 infor(information)
{
int low, high; //插入结点在中序队列中的位置范围
int flag; //1 插入双亲结点的右结点, 0 左结点
BNode *parent;