/*
题目:
输入二叉树的前序遍历和中序遍历的结果,重建二叉树。假设输入的前序遍历和中序遍历的结果中不包含重复的数字。
*/
/*
思路:
使用前序遍历找到根节点,再通过中序遍历找到左子树和右子树。
采用递归的方法建立。
*/
struct BinaryTreeNode{
int value;
BinaryTreeNode* left;
BinaryTreeNode* right
} BinaryTreeNode* Construct(int* preOrder,int* Inorder,int length){
if(preOrder == null || Inorder == null || length <= 0){
return null;
}
return ConstructCore(preOrder,preOrder+length-1,Inorder,Inorder+length-1);
} BinaryTreeNode* ConstructCore(int *preOrder,int* endPreOrder,int* inOrder,int *endInOrder){
BinaryTreeNode* root = new BinaryTreeNode();
root->value = *preOrder;
root->left = null;
root->right = null; if(preOrder == endInOrder){
if(inOrder == endInOrder && preOrder == inOrder){
return root;
}
else{
throw std::exception("Invalid input");
}
} //在中序遍历中找到根节点
int* rootInorder = inOrder;
while(rootInorder <= endInOrder && *rootInorder != root->value){
rootInorder++;
} int leftLength = rootInorder - inOrder;
int *leftPreOrderEnd = preOrder + leftLength; //创建左子树
if(leftLength > 0){
root->left = ConstructCore(preOrder+1,leftPreOrderEnd,inOrder,rootInorder-1);
} if(leftLength < endPreOrder - preOrder){
root->right = ConstructCore(leftPreOrderEnd+1,endPreOrder,rootInorder+1,endInOrder);
}
return root;
}

  

剑指offer-面试题7-重建二叉树-二叉树的更多相关文章

  1. 剑指offer面试题:输入某二叉树的前序遍历和中序遍历,输出后序遍历

    二叉树的先序,中序,后序如何遍历,不在此多说了.直接看题目描述吧(题目摘自九度oj剑指offer面试题6): 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结 ...

  2. 剑指offer面试题6 重建二叉树(c)

  3. 剑指offer面试题6 重建二叉树(java)

    注:(1)java中树的构建 (2)构建子树时可以直接利用Arrays.copyOfRange(preorder, from, to),这个方法是左开右闭的 package com.xsf.SordF ...

  4. 剑指Offer:面试题6——重建二叉树(java实现)

    问题描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不包含重复的数字. 例如: 输入:前序{1,2,4,7,3,5,6,8},中序{4,7,2,1 ...

  5. 剑指offer——面试题26:判断二叉树B是否为二叉树A的子结构

    #include"iostream" #include"stdio.h" #include"math.h" using namespace ...

  6. 【剑指Offer面试题】 九度OJ1385:重建二叉树

    题目链接地址: pid=1385">http://ac.jobdu.com/problem.php?pid=1385 题目1385:重建二叉树 时间限制:1 秒内存限制:32 兆特殊判 ...

  7. C++版 - 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解

    剑指offer  面试题23:从上往下打印二叉树 参与人数:4853  时间限制:1秒  空间限制:32768K 提交网址: http://www.nowcoder.com/practice/7fe2 ...

  8. C++版 - 剑指Offer 面试题39:二叉树的深度(高度)(二叉树深度优先遍历dfs的应用) 题解

    剑指Offer 面试题39:二叉树的深度(高度) 题目:输入一棵二叉树的根结点,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度.例如:输入二叉树 ...

  9. 剑指Offer - 九度1385 - 重建二叉树

    剑指Offer - 九度1385 - 重建二叉树2013-11-23 23:53 题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的 ...

  10. 【剑指Offer面试题】 九度OJ1368:二叉树中和为某一值的路径

    题目链接地址: http://ac.jobdu.com/problem.php? pid=1368 题目1368:二叉树中和为某一值的路径 时间限制:1 秒内存限制:32 兆特殊判题:否提交:2252 ...

随机推荐

  1. learn about sqlserver partitition and partition table 1

    Dear all, Let get into business, the partitions on sql server is very different with that on oracle. ...

  2. Yandex Big Data Essentials Week1 Unix Command Line Interface File Content exploration

    cat displays the contents of a file at the command line copies or apppend text file into a document ...

  3. 《Head first设计模式》之策略模式

    策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 假设有一个模拟鸭子的游戏,游戏中会出现各种鸭子,一边游泳戏水,一边呱呱叫.这个游戏的内部设计了一个 ...

  4. pymongo(看后转载,在原基础上添加了类连接和简单调用)

    一.MongoDB 数据库操作 1. 连接数据库 import pymongo conn = pymongo.Connection() # 连接本机数据库 # conn = pymongo.Conne ...

  5. 用命令提示符运行简单的Java程序报错

    首先用记事本写一个最简单的Java代码,我把文件保存在桌面的HelloWorld文件夹中,这里将记事本的名称改为HelloWorld.java public class HelloWorld{ pub ...

  6. Mac启动MongoDB报错:exception in initAndListen: NonExistentPath: Data directory /data/db not found., terminating

    这是主要错误: initAndListen中的异常:NonExistentPath:找不到数据目录/ data / db. 最新版的Mac系统Catalina发生了令人惊讶的更改:它不允许更改根目录( ...

  7. Android布局管理器-使用TableLayout表格布局管理器实现简单的用户登录页面

    场景 Android布局管理器-使用FrameLayout帧布局管理器显示层叠的正方形以及前景照片: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article ...

  8. mybatis postgresql 批量删除

    一.需求介绍 前端是一个列表页面,列表可以进行复选框的选择,后台进行关联表数据的删除. 二.框架介绍 springboot+mybatis 数据库用的postgresql 三.具体代码(前端js) 1 ...

  9. vim配置markdown预览

    注:系统为Centos7,安装了gnome桌面环境. 我的vim装了vimplus工具包,看代码一等一的方便,但是看md的时候还是有些不快乐.于是想找个插件实现markdown的预览. 尝试了几个vi ...

  10. 原创:mysql5 还原至mysql 8.0.11数据库链接配置提示错误(修改内容有三处

    原创:mysql5 还原至mysql 8.0.11数据库链接配置提示错误改有三: a) mysql 连接jar包版修改 b)类路径修改 c)配置连接池地址修改 因版本升级,首先要修改 1:mysql- ...