// 根据先序序列和中序序列确定二叉树,pre是指向后序序列数组首元素的指针,in是指向中序序列数组首元素的指针 ,n是结点总数 BiTNode* CreateBiTree(int *pre, int *in, int n){ if (n == 0) { returnNULL; } // 先序的第一个是根节点 BiTNode *root =newBiTNode(pre[0], NULL, NULL);
// 在中序中寻找根节点,则该根节点左右就是其左右子树 int rootIndex = pre[0]; for (rootIndex = 0; rootIndex < n; ++rootIndex) { if (in[rootIndex] == pre[0]) { break; } } // 确定了左右字数方位,开始递归 // 递归构建反转左子树 root->lchild = CreateBiTree(pre + rootIndex + 1, in + rootIndex + 1, n - rootIndex - 1); // 递归构建反转右子树 root->rchild = CreateBiTree(pre + 1, in, rootIndex); return root; }
intmain(){ int N; cin >> N; int in[N], pre[N]; // 用于储存先序和中序序列 for (int i = 0; i < N; ++i) { cin >> in[i]; } for (int i = 0; i < N; ++i) { cin >> pre[i]; }
// 创建反转的二叉树 BiTNode *BT = CreateBiTree(pre, in, N);