Question

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

Solution

首先先序遍历的第一个数字是根,然后从中序遍历中,通过根的值,可以将数组分为左子树(左边的)和右子树(右边的)。

然后取出左子树的先序遍历和中序遍历部分就可以用于构建这颗子树,方法和刚才一样,可以看到这个是一个递归的过

程,右子树同理。

Code

/*** Definition for binary tree* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {if (pre.size() == 0 || vin.size() == 0)return NULL;return ConstructBinaryTreeCore(pre, vin, 0, pre.size() - 1, 0, vin.size() - 1);}TreeNode* ConstructBinaryTreeCore(vector<int>& pre, vector<int>& vin, int pre_start, int pre_end, int vin_start, int vin_end) {int rootValue = pre[pre_start];TreeNode* root = new TreeNode(rootValue);if (pre_start == pre_end) {if (vin_start == vin_end) return root;else {//throw exception("Invalid input");}}int rootVin = vin_start;while (rootVin <= vin_end && vin[rootVin] != rootValue)rootVin++;if (vin_start == vin_end && vin[rootVin] != rootValue) {//throw exception("Invalid input");}int leftLength = rootVin - vin_start;int leftPreEnd = pre_start + leftLength;if (leftLength > 0) {root->left = ConstructBinaryTreeCore(pre, vin, pre_start + 1, leftPreEnd, vin_start, rootVin - 1);}if (leftLength < pre_end - pre_start) {root->right = ConstructBinaryTreeCore(pre, vin, leftPreEnd + 1, pre_end, rootVin + 1, vin_end);}return root;}
};

转载于:https://www.cnblogs.com/zhonghuasong/p/7096150.html

剑指Offer——重建二叉树相关推荐

  1. 剑指offer 重建二叉树

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

  2. 剑指offer 重建二叉树 python

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

  3. 《LeetCode力扣练习》剑指 Offer 27. 二叉树的镜像 Java

    <LeetCode力扣练习>剑指 Offer 27. 二叉树的镜像 Java 一.资源 题目: 请完成一个函数,输入一个二叉树,该函数输出它的镜像. 例如输入: 4 / 2 7 / \ / ...

  4. 剑指offer07.重建二叉树

    剑指offer07重建二叉树 题目 : 输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点. 假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 示例 : Input: preo ...

  5. 【LeetCode】剑指 Offer 34. 二叉树中和为某一值的路径

    [LeetCode]剑指 Offer 34. 二叉树中和为某一值的路径 文章目录 [LeetCode]剑指 Offer 34. 二叉树中和为某一值的路径 package offer;import ja ...

  6. 【LeetCode】剑指 Offer 27. 二叉树的镜像

    [LeetCode]剑指 Offer 27. 二叉树的镜像 文章目录 [LeetCode]剑指 Offer 27. 二叉树的镜像 一.递归法 二.辅助栈(或队列) 一.递归法 根据二叉树镜像的定义,考 ...

  7. 算法leetcode|剑指 Offer 27. 二叉树的镜像|226. 翻转二叉树(rust很强)

    文章目录 剑指 Offer 27. 二叉树的镜像|226. 翻转二叉树: 样例 1: 限制: 分析 题解 rust go c++ java python 原题传送门:https://leetcode. ...

  8. JZ27 [剑指 Offer 27] 二叉树的镜像

    二叉树的镜像 Category Difficulty Likes Dislikes lcof Easy (79.61%) 311 - 请完成一个函数,输入一个二叉树,该函数输出它的镜像. 例如输入: ...

  9. 《剑指offer》二叉树镜像

    剑指offer简单题,但是能一下写对也需要小心考虑细节. 题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / 6 10 /   / 5 7 9 11 ...

  10. 【Java】 剑指offer(27) 二叉树的镜像

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请完成一个函数,输入一个二叉树,该函数输出它的镜像. 思路 画图可 ...

最新文章

  1. Oracle删库跑路
  2. 华为内部面试题库---(2)
  3. 冯诺依曼计算机结构教案,冯诺依曼结构的计算机-同济大学精品课程.PPT
  4. Boost - 序列化 (Serialization)
  5. MySQL——数据库和表的增删改查
  6. 诺基亚计划推出高档触摸屏手机以对抗iPhone
  7. CVPR 2019 | 微软亚洲研究院 7 篇精选论文解读
  8. 打印1到最大的n位数
  9. java private list_Java基础知识回顾之四 ----- 集合List、Map和Set
  10. linux 脚本做成服务,Shell脚本注册到Linux系统服务实例
  11. 【English】20190430
  12. VS studio源代码管理辅助工具sourceoffsite使用过程中的错误解决方法
  13. 无人机系统测试软件,无人机航测软件(pix4D)
  14. k8s设计-多容器pod设计模式
  15. 程序大咖的博客集锦_更新Unity3d
  16. 计算机毕业设计springboot睎晴贸易公司安保保洁管理平台
  17. 【回文数】求11到n之间(包括n),既是素数又是回文数的整数有多少个。 输入 一个大于11小于1000的整数n。 输出 11到n之间的素数回文数个数。 样例输入 Copy 23 样例输出 Copy 1
  18. 华为云从入门到实战 | 云容器服务
  19. uni-app 实现微信分享
  20. iOS三句话实现文本转语音:AVSpeechSynthesizer

热门文章

  1. python学习笔记之读取配置文件【转自https://my.oschina.net/u/3041656/blog/793467】
  2. PLAY2.6-SCALA(五) Action的组合、范围的设置以及错误的处理
  3. Node.js:连接 MySQL
  4. 【转】每一种创伤,都是一种成熟
  5. 哈希表(散列表)冲突解决方法
  6. 判断IE版本的HTML语句详解,如:!--[if IE 9] 仅IE9可识别 ![endif]--
  7. 【Python】if __name__ == __main__做了什么?
  8. 报表架构 jasperReports+iReport使用说明
  9. silverlight寻奇
  10. R中的 url编码 和 解码