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

这道题首先我们先回顾下二叉树的相关概念:

二叉树同链表一样属于动态的数据结构

二叉树具有具有唯一根节点
对于每个节点最多可以分出俩个叉
每个节点最多有一个父节点
由上面的概念可以引申出,树是由若干的节点组成,节点连接起来成了树,每个节点由一个数据和俩个指针组成。
创建树就是创建节点,然后连接节点。
二叉树具备天然递归结构 二叉树不一定是“满”的

二叉树的遍历有三种方式:
1)先序遍历:先访问根节点,然后访问左节点最后访问右节点 (根-左-右)
2)中序遍历:先访问左节点,然后访问根节点,最后访问右节点(左-根-右)
3)后序遍历:先访问左节点,然后访问右节点,最后访问根节点(左-右-根)

按照如上遍历规则,我们预测此二叉树的三种遍历结果如下
如果是先序遍历:28-16-13-22-30-29-42
如果是中序遍历:13-16-22-28-29-30-42
如果是后序遍历:13-22-16-29-42-30-28

在具备了上述二叉树的基础知识之后我们就可以回过头来看看这道题

题目提供了此二叉树的先序和中序的数组,由先序的特性 我们可以很明确地知道1乃是最初的根节点,而由中序的特性可以明确的知道 4-7-2乃是根节点1的左子树

所以我们代码这么写

package com.allen.test;/*** 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。* 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}, 则重建二叉树并返回。* * @author lulf* @date 2018年11月21日*/
public class Solution {public static void main(String[] args) {int[] pre = { 1, 2, 4, 7, 3, 5, 6, 8 };int[] in = { 4, 7, 2, 1, 5, 3, 8, 6 };TreeNode treeNode = reConstructBinaryTree(pre, in);}public static TreeNode reConstructBinaryTree(int[] pre, int[] in) {return reConstructBinaryTree(pre, 0, pre.length - 1, in, 0, in.length - 1);}private static TreeNode reConstructBinaryTree(int[] pre, int prestart, int preend, int[] in, int instart, int inend) {if(prestart>preend||instart>inend){return null;}TreeNode treeNode=new TreeNode(pre[prestart]);for(int i=instart;i<=inend;i++){if(pre[prestart]==in[i]){treeNode.left=reConstructBinaryTree(pre, prestart+1, prestart+i-instart, in, instart, i-1);treeNode.right=reConstructBinaryTree(pre, prestart+i-instart+1, preend, in, i+1, inend);}}return treeNode;}
}复制代码

采用递归,不断地把响应数组的下标区间值送入层层递归。

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

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

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

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

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

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

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

  4. 剑指offer之重建二叉树

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 顺时针或逆时针旋转180度等于先作一个水平镜像,再作一个垂直镜像
  2. kubernetes log 流式数据处理
  3. linux系统层次(转)
  4. Visual Studio 2013开发 mini-filter driver step by step 获取文件读写内容(6)
  5. 20155332 mybash的实现
  6. 利用python爬虫(案例5)--X刺代理的小IP们
  7. python自动生成word版本试卷_Python解决问题:生成包含加减练习题的Word文件
  8. 前端,校招,面淘宝,指南
  9. matlab im2double
  10. “约见”面试官系列之常见面试题之第一百零一篇之vue-router传参(建议收藏)
  11. 启动盘Linux windows,Linux 中创建 USB 启动盘来拯救 Windows 用户
  12. 计算机常用维护知识,电脑怎么维护?电脑日常维护小常识
  13. 单片机简单的计算器c语言程序,AT89S52单片机实现简易计算器(C语言程序)
  14. 关于Virtual的英语含义
  15. 和平精英服务器维护怎么办,和平精英登陆不了怎么办 和平精英无法登陆解决方法...
  16. 10到100整数倍数英文怎么写
  17. 委托实现信用卡用户定时还款功能
  18. 前端基础 CSS 第十一章 使用CSS样式表 特效属性部分 ----暑假学习第九天
  19. 我爱机器学习网机器学习类别文章汇总
  20. 洛谷 P2357 守墓人(树状数组)

热门文章

  1. 表单验证Jquery扩展方法类
  2. android 课程——样式
  3. NASM学习之Windows下编写16位程序
  4. Linux下Sed命令的用法(之替换)
  5. 网页制作中规范使用DIV+CSS命名规则(转)
  6. 如何重装Domino服务器或者将Domino服务器从一台机器迁移到另外一台
  7. 十年技术,不要再迷茫
  8. 标准爬虫初探,来自Python之父的大餐!
  9. 阿里云移动端播放器高级功能---直播时移
  10. 华大基因回复深交所:“14万中国人基因大数据”项目与外方机构无关