给定二叉树的前序和中序,判断是否可以构成一颗二叉树,如果可以输出后序
来源:互联网 发布:淘宝双十一红包攻略 编辑:程序博客网 时间:2024/05/23 22:00
很简单,注意边界条件
#include <stdio.h>const int kMaxN = 1000;int pre[kMaxN] = {0};int in[kMaxN] = {0};int post[kMaxN] = {0};int n = 0;bool Construct(int ps, int pe, int is, int ie, int s, int e) { if (pe - ps != ie - is) return false; int root = pre[ps]; post[e] = root; int i; for (i = is; i <= ie; i++) { if (in[i] == root) break; } if (i > ie) { return false; } int len1 = i - is; int len2 = ie - i; bool l = false; bool r = false; if (len1 == 0) { l = true; } else { l = Construct(ps + 1, ps + len1, is, is + len1 - 1, s, s + len1 - 1); } if (len2 == 0) { r = true; } else { r = Construct(ps + len1 + 1, pe, is + len1 + 1, ie, s + len1, e - 1); } return l && r;}int main() { while (scanf("%d", &n) != EOF) { for (int i = 0; i < n; i++) { scanf("%d", &pre[i]); } for (int i = 0; i < n; i++) { scanf("%d", &in[i]); } if (Construct(0, n - 1, 0, n - 1, 0, n - 1)) { for (int i = 0; i < n; i++) { printf("%d ", post[i]); } printf("\n"); } else { printf("No\n"); } }}
- 给定二叉树的前序和中序,判断是否可以构成一颗二叉树,如果可以输出后序
- 判断给定数组是否是二叉树的前序或者后序遍历结果
- 判断给定的数组是否为二叉搜索树的后序遍历序列
- 由二叉树的后序序列和中序序列构成二叉树
- 已知二叉树的前序和中序序列,不建立二叉树来输出后序序列
- 已知一棵二叉树的后序遍历和中序遍历,写出可以确定这棵二叉树的算法
- 确定后序遍历二叉树是否构成二叉排序树
- 二叉树面试题—前,中,后序(非递归),判断是否为完全二叉树
- 给定二叉树的先序遍历和中序遍历,输出它的后序遍历序列
- 判断一个序列是否是二叉查找树的后序、前序、中序遍历序列
- 已知二叉树的前序和中序序列,要求写出后序 ,如果给的前序和中序序列是错误的,就要输出"NO ANSWER!"
- 二叉树的链式存储结构 前序 后序 中序 层序遍历操作实现 判断是否完全二叉树
- 二叉树和二叉搜索树的前序、中序和后序遍历
- Binary Tree——给定二叉树的前序遍历和中序遍历重建二叉树
- C++ 根据前序遍历序列和中序遍历序列可以构造唯一的二叉树
- 根据前序遍历(或者是后序遍历)和中序遍历得到的序列可以重建二叉树
- 由前序和中序遍历建立二叉树并后序遍历输出二叉树
- 由中序和后序建立二叉树,并前序输出
- POJ 3026 Borg Maze
- Linux 常用20个命令
- 8#13 - 多校7
- 一步一步将你的C#程序部署到Android.
- Mat 逻辑运算
- 给定二叉树的前序和中序,判断是否可以构成一颗二叉树,如果可以输出后序
- CI8.5--有效括号组合问题
- Android 文件操作注意点
- TDBGrid的使用
- ora-00607 ora-00600
- linux more_and_less
- 【OpenStack】计算节点上的存储
- MRTG在windows下面的步骤教程
- 导入Hive数据导MySQL