【21】重建二叉树
来源:互联网 发布:中国软件与即时 编辑:程序博客网 时间:2024/05/01 07:15
题目:输入某个二叉树的前序遍历和中序遍历的结果,重建二叉树。假设输入的两个序列中都是没有重复数字的,例如输入前序序列{1,2,4,7,3,5,6,8},中序序列{4,7,2,1,5,3,8,6}
分析:
1. 在二叉树的前序序列中,第一个数总是二叉树的根结点的值。对应的如果把根节点的值在中序序列中找出来,则中序序列中位于根节点值的左边区间为左子树,右边为右子树
2. 根据题目假设的输入的两个序列是不重复的,因此我们可以利用扫描中序序列找到根节点,然后递归的建立二叉树即可
3. 利用一个BuildTree函数来返回BinaryTreeNode*,在函数内部利用new动态分配结点的内存,这样就不用担心函数返回栈区中分配的空间而使指针失效
//二叉树的结点struct BinaryTreeNode{ int value;BinaryTreeNode *lson;BinaryTreeNode *rson;};//重建二叉树BinaryTreeNode* BuildTree(int *preOrder, int *inOrder, int n){//不合法的数据if(preOrder == NULL || inOrder == NULL || n <= 0){ return NULL;}BinaryTreeNode *root = new BinaryTreeNode();root->value = preOrder[0];root->lson = NULL;root->rson = NULL;//找到中序遍历中根节点的位置int index = 0;while(index < n && preOrder[0] != inOrder[index]){ ++index;}//不合法数据if(index >= n){ return NULL;}root->lson = BuildTree(preOrder+1, inOrder, index);root->rson = BuildTree(preOrder+1+index, inOrder+index+1, n-index-1);return root;}
0 0
- 【21】重建二叉树
- 3.9重建二叉树
- 重建二叉树
- 二叉树重建
- 二叉树重建
- 二叉树的重建
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 二叉树重建
- 二叉树重建
- 重建二叉树
- 重建二叉树
- Hadoop 异常解决
- linux-ubuntu关闭防火墙
- ant做Android打包时出现“无法确定 <T>T 的类型参数”
- Linux下oracle10g的安装与配置及相关问题解决
- 机器学习-KNN
- 【21】重建二叉树
- 存储类型、标识符的生命周期
- ssh免登陆设置后,还是要输入密码
- Stack Overflow Questions Tags Users Badges Unanswered Ask Question ruby
- MATLAB中文件的读写和数据的导入导出
- 如何管理二十八类型的员工
- swift笔记
- ORA-01466: unable to read data - table definition has changed
- 第三讲:关系数据库模型