剑指offer07重建二叉树

题目 :

输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。
假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

示例 :

Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
Output: [3,9,20,null,null,15,7]

思路:

要根据给出的前序和中序遍历,先确定树的根节点,左子树的范围,右子树的范围
这样的话就能快速的写出代码

前序遍历 : [根节点 | 左子树 | 右子数] 根左右
中序遍历 : [左子树 | 根节点 | 右子数] 左根右
1.
先找到根节点为3,那么前序的后面四个就是子树的范围
然后看中序遍历的节点值为3的那个点,9位于3的左边,那么他就是在左子树
15,20,7 在3的右边,那么他们是右子数里面的节点

  • 前序 : [3 | 9 | 20,15,7]
  • 中序 : [9 | 3 | 15,20,7]
    那我们现在至少可以画出个这样的图

    2.那么第一个的树基本结构就已经完成了
    再将他细分
    树可以分为左子树右子树,根节点
    但是右子树又能看做一个树来排部
    其实这就是一个递归的过程
    分析方法和第一步一样
    右子数的前序 : [20 | 15 | 7]
    右子数的中序 : [15 | 20 | 7]
    这样就将一个树分成多个部分,多个部分又能划分为更小的部分
    这样一步一步的往下走那么就能将整个数给划分出来

这样我们就能够根据这个思路来写出算法
递归的实现
需要进行判断哦
若是测试用例传入为空可能就会报错


type TreeNode struct {Val   intLeft  *TreeNodeRight *TreeNode
}func buildTree(preorder []int, inorder []int) *TreeNode {length := len(preorder)if length == 0 {return nil}newTree = &TreeNode{preorder[0],nil,nil}var indexTree int //用来标记在中序遍历中的根节点位置for i := 0;i < length;i++ {// 利用for循环来找到根节点在中序遍历中的位置if inorder[i] == preorder[0]{indexTree = ibreak}}newTree.Left = buildTree(preorder[1:indexTree+1],inorder[:indexTree])newTree.Right = buildTree(preorder[indexTree+1:],inorder[indexTree+1:])return newTree
}

这样我们就能够构建一颗给定的二叉树了

剑指offer07.重建二叉树相关推荐

  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. 【LeetCode】剑指 Offer 34. 二叉树中和为某一值的路径

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

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

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

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

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

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

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

  8. 剑指offer--重建二叉树

    记录来自<剑指offer>上的算法题目. 题目如下: 输入某二叉树的前序遍历和中序遍历的结果,请重构出该二叉树.假设输入的前序遍历和中序遍历的结果都不含重复的数字. 二叉树的结点定义如下: ...

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

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

最新文章

  1. DotNetSpeech.dll的使用
  2. php下webservice使用总结
  3. iOS开发UI篇—UITableview控件基本使用
  4. Tomcat介绍及性能优化
  5. LeetCode题组:第1162题-地图分析
  6. 【算法基础】坚持刷题678天的感受!
  7. 开源的负载测试/压力测试工具 NBomber
  8. python replace函数后面的数字的含义
  9. React Native组件的结构和生命周期
  10. mysql 的各种 join
  11. ff14自动琴谱(成功版)
  12. 机器视觉:光源基础及选型
  13. Microsoft Office 2010组件介绍
  14. [GIS教程] 5.3 空间数据组织
  15. 管理工具 QTTabBar
  16. 关于 Vue.js 的那些事儿
  17. 用自己打工挣的钱,他创办广告公司,总资产已达3000多万
  18. spreadsheetControl
  19. 我的独家快速美容去痘秘方
  20. 西安的房价为什么猛涨

热门文章

  1. vue 改变domclass_基于 vue 开发甘特图组件的心路历程(兼设计分享)
  2. 115. Leetcode 718. 最长重复子数组 (动态规划-子序列问题)
  3. 强化学习(二)---强化学习介绍
  4. 点云网络的论文理解(七)-Frustum PointNets for 3D Object Detection from RGB-D Data
  5. 从C语言的角度重构数据结构系列(六)-C语言的数据类型及常变量
  6. Tableau 2020.3 发布!新增 写入外部数据库 与 预测建模 等功能,进一步增强扩展分析
  7. tableau必知必会之学做时尚的环状条形图(跑道图)
  8. Flink从入门到精通100篇(三)-如何利用InfluxDB+Grafana搭建Flink on YARN作业监控大屏环境
  9. android 9patch 漏洞,Android 9patch 图片解析堆溢出漏洞分析(CVE-2015-1532)
  10. HJ23 删除字符串中出现次数最少的字符