//先序遍历二叉树
void TraverseBiTree(tree *T) {
  if (T == NULL)
    return;
  printf("%d ", T->data);
  TraverseBiTree(T->Lch);
  TraverseBiTree(T->Rch);
}
int main(int argc, char const *argv[]) {
  int n, i, L, R;
  tree T[16];
  scanf("%d", &n);
  for (i = 0; i < n; i++) {
    T[i].data = i + 1;
    scanf("%d%d", &L, &R);
    if (L != 0) {
      T[i].Lch = &T[L - 1];
    } else {
      T[i].Lch = NULL;
    }
    if (R != 0) {
      T[i].Rch = &T[R - 1];
    } else {
      T[i].Rch = NULL;
    }
  }
  TraverseBiTree(&T[0]);
  printf("\n");
  InOrderBiTree(&T[0]);
  printf("\n");
  PostOrderBiTree(&T[0]);
  printf("\n");
  return 0;
}
int main()
{
    BiTree T;
    printf("创建二叉链表,请按先序连续输入树元素\n");
    CreatBiTree(&T);
    printf("PRE--Order\n");
    PreOrderTraverse(T);
    printf("\n");
    printf("IN--Order\n");
    InOrderTraverse(T);
    printf("\n");
    printf("POST--Order\n");
    PostOrderTraverse(T);
    printf("\n");
    printf("NoPre--Order\n");
    NoPreOrderTraverse(T);
    printf("\n");
    printf("NoIN--Order\n");
    NoInOrderTraverse(T);
    printf("\n");
    printf("NoPOST--Order\n");
    NoPostOrderTraverse(T);
    printf("\n");
    printf("Traverse\n");
    TraverseBiTree(T);
    BiTreeDeep(T);
    NoBiTreeDeep(T);


    printf("方法2创建树\n");
    BiTree t;
    t=CreatBiTree2(t);
    PreOrderTraverse(t);

}