题目

题解

官方题解:https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/solution/mian-shi-ti-07-zhong-jian-er-cha-shu-by-leetcode-s/

根据前序遍历第一点就是根节点,我们可以根据前序遍历得到根节点然后去中序中找根节点的位置,找到根节点位置就可以根据中序遍历的结果得出左右子树的节点数,然后再根据得出的左右子树的节点数去前序遍历找出左右子树的范围。然后再根据相同的规律在左右子树的范围中利用这个规律去构建,这就是子问题了。可以用递归解决!!!

class Solution1 {private HashMap<Integer,Integer> indexMap;public TreeNode buildTree(int[] preorder, int[] inorder) {int n = preorder.length;// 构建哈希映射,便于快速找到根节点,值作键,索引做值indexMap = new HashMap<>();for (int i = 0; i < n; i++) {indexMap.put(inorder[i],i);}return myBuildTree(preorder,inorder,0,n-1,0,n-1);}public TreeNode myBuildTree(int[] preorder, int[] inorder, int pre_left, int pre_right, int ino_left, int ino_right){if (pre_left > pre_right){return null;}// 先序遍历第一个节点就是根节点int pre_root = preorder[pre_left];// 构建根节点TreeNode root = new TreeNode(pre_root);// 找出中序遍历的根节点位置int ino_root = indexMap.get(pre_root);// 得到左子树的个数int left_num = ino_root - ino_left;// 构建左子树root.left = myBuildTree(preorder,inorder,pre_left+1,pre_left+left_num,ino_left,ino_root-1);// 构建右子树root.right = myBuildTree(preorder,inorder,pre_left+left_num+1,pre_right,ino_root+1,ino_right);return root;}}

剑指 Offer 07. 重建二叉树(day02)相关推荐

  1. 【LeetCode】剑指 Offer 07. 重建二叉树

    [LeetCode]剑指 Offer 07. 重建二叉树 文章目录 [LeetCode]剑指 Offer 07. 重建二叉树 package offer;import java.util.ArrayD ...

  2. 剑指 Offer 07. 重建二叉树【千字分析,三种方法】

    立志用最少的代码做最高效的表达 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如,给出 前序遍历 preorder = [3,9,2 ...

  3. 【※ LeetCode 剑指 Offer 07. 重建二叉树(中等)】尚待完善

    题目: 输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点. 假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 来源:力扣(LeetCode) 链接:https://leetc ...

  4. 剑指offer 07重建二叉树(根据前序、中序遍历)草真tm难

    /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode ...

  5. 剑指 Offer 07. 重建二叉树

    ⭐简单说两句⭐ CSDN个人主页:后端小知识

  6. 剑指Offer #04 重建二叉树(递归)

    题目来源:牛客网-剑指Offer专题 题目地址:重建二叉树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序 ...

  7. [剑指offer]8.重建二叉树

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

  8. 剑指Offer系列 重建二叉树

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

  9. 剑指offer之重建二叉树

    1 问题 重建二叉树:给定二叉树的先序遍历(根左右)和中序(左中右)遍历结果,建立这棵二叉树.输入保证二叉树无重复结点 以先序{1, 2, 4, 7, 3, 5, 6, 8}和中序{4, 7, 2, ...

  10. 剑指offer——7.重建二叉树

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

最新文章

  1. C++知识点33——使用C++标准库(无序关联容器unordered_(multi)map,unordered_(multi)set)
  2. CF797E. Array Queries
  3. Handler消息机制(七):Message的数据结构是什么样子
  4. 秀尔算法:破解RSA加密的“不灭神话” --zz
  5. 功能性平台创新-农业大健康·杨建国:谋定都江堰精华灌区
  6. HDFS【2.5.1】系列1:HDFS的核心数据结构---元数据
  7. stylus导入时 报错These relative modules were not found
  8. 为啥你用@JsonFormat注解反序列化LocalDateTime总失败?
  9. 获取 docker 容器(container)的 ip 地址
  10. 2016年《大数据》杂志调查问卷
  11. C/C++ 变参函数
  12. 《21天学通Java(第7版)》—— 1.10 练习
  13. 简单的网页制作期末作业
  14. 微信支付 签名错误 uniapp
  15. 计算机桌面任务栏过宽怎么处理,任务栏变宽了怎么办 还原变宽任务栏的方法【图文教程】...
  16. 乐吾乐le5le-Topology为智慧水务可视化赋能(一)
  17. 数列极限导出重要无理数
  18. wma转mp3怎么弄_wma格式怎么转换mp3
  19. 百度搜索关键词的使用方式
  20. 高频面试题之JVM灵魂拷问,21题带你通关!

热门文章

  1. 背景减法——自组织算法
  2. oracle硬解析和软解析
  3. 如何利用【百度地图API】,制作房产酒店地图?(上)——制作自定义标注和自定义信息窗口...
  4. 8.软件架构设计:大型网站技术架构与业务架构融合之道 --- 高并发问题
  5. 4.1 Zend_Config
  6. 2. PHP 自动转义函数
  7. APT攻防整理-常用CVE
  8. linux shell中$0,$?,$!等的特殊用法
  9. C# 高效字符串连接 StringBuilder介绍
  10. 对sppnet网络的理解