题目描述:从前序与中序遍历序列构建二叉树

注意:你可以假设数中没有重复元素。

例如,给出:
前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回如下二叉树:

思路分析:
1.遍历前序遍历的数组,每次拿到一个元素(root)之后再中序遍历的数组中找到对应的位置。
2.在中序遍历的数组中找到root之后

  • root的左边将会是root的左子树
  • root的右边将会是root的右子树

当我们拿到前序遍历的下一个数时,我们再接着区中序遍历中找到它的位置,然后它右边的将会时它的右子树,左边的将会是它的左子树(如果它的左边或者右边为空的话,说明它没有左子树或者右子树)……以此类推,这也就是我们熟悉的递归思想。


代码

class Solution {//定义一个全局变量,如果把它放在方法参数里面,那么他是一个局部变量,如果进行递归的话,它最终还是会回到原来的值public int index = 0;//参数解释//2.因为每次拿到前序遍历的数在中序遍历中找到之后,它的区间是发生改变的,所以需要一个区间public TreeNode buildTreeChild(int[] preorder,int[] inorder,int begin,int end){//边界判断,如果begin的值大于end的值,那么就说明这个节点的数就构建完成了if(begin > end){return null;   }//首先创建跟根节点TreeNode root = new TreeNode(preorder[index]);//然后找到root在中序遍历的位置int rootIndex = findIndexInorder(inorder,preorder[index],begin,end);index++;if(rootIndex == -1){//也就是没找到 返回null;return null;}//此时构建root的左树和右树root.left = buildTreeChild(preorder,inorder,begin,rootIndex-1);root.right = buildTreeChild(preorder,inorder,rootIndex+1,end);return root;}//写一个方法:在中序遍历的数组当中查找根节点所在的下标private int findIndexInorder(int[] inorder,int val,int begin,int end){for(int i = begin;i <= end ;i++){if(inorder[i] == val){return i;}}return -1;}public TreeNode buildTree(int[] preorder, int[] inorder) {//首先得判断如果数组有一个为null,那么就无法确定一颗二叉树if(preorder == null || inorder == null){return null;}//那么第一次的时候,在前序遍历拿到的第一个数字的时候,是在中序遍历的整个区间区寻找的,return buildTreeChild(preorder,inorder,0,inorder.length-1);}
}

【LeetCode】——根据前序和中序遍历构建二叉树相关推荐

  1. 二叉树经典题之从前序和中序遍历构建二叉树

    前言: 二叉树刷题是有固定思维的,请移步 README]二叉树刷题框架 文章目录 前言: 从前序和中序遍历构建二叉树 思路 代码 注意 从中序和后序遍历构建二叉树 思路 代码 从前序和中序遍历构建二叉 ...

  2. 通过前序遍历和中序遍历构建二叉树 python实现

    前言 通过前序遍历和中序遍历构建二叉树的原理,主要是找前序遍历根节点在中序遍历中的位置,然后将二叉树而成左子树和右子树,然后依次进行这样的操作,思路还是比较简单的 代码 class Node:def ...

  3. LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal 由前序和中序遍历建立二叉树 C++...

    LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal 由前序和中序遍历建立二叉树 C++ Given preo ...

  4. 数据结构---前序和中序遍历的二叉树序列还原二叉树

    数据结构-前序和中序遍历的二叉树序列还原二叉树 代码: #include<stdio.h> #include<stdlib.h> typedef struct bstTree ...

  5. 根据二叉树先序遍历和中序遍历构建二叉树

    前方有一个人在等着你,你只管勇敢的向前走 采用递归分治的思想,将一个大问题划分成子问题, 对于本题,根据二叉树先序遍历和中序遍历构建二叉树,思路: 我们可以求得根节点左子树的先序和中序序列,以及右子树 ...

  6. 【C++/数据结构】先序遍历+中序遍历构建二叉树

    #include<vector> using namespace std; struct TreeNode {     int val;     TreeNode* left;     T ...

  7. 通过层序遍历和中序遍历构建二叉树

    通过层序遍历和中序遍历构建二叉树的过程与通过中序遍历和先序遍历构建二叉树的过程很相似. 先序遍历和中序遍历是通过先序遍历的首个元素确定根节点,再根据这个元素在中序遍历中出现的位置分为左子树和右子树,然 ...

  8. 二叉树的中序遍历_Go 刷 leetcode从前序与中序遍历序列构造二叉树

    今天为大家讲解 LeetCode 第 105 题,是一道关于数组和树的题目. 题目描述 根据一棵树的前序遍历与中序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 例如,给出 前序遍历 pre ...

  9. Leetcode 105. 前序和中序遍历序列构造二叉树

    Time: 20190901 Type: Medium 题目描述 根据一棵树的前序遍历与中序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 例如,给出 前序遍历 preorder = [3, ...

最新文章

  1. POJ 1014: Dividing
  2. 如何使用Angular Generator创建新的Component
  3. 某著名公司2015暑期实习招聘试题及相关内容复习
  4. Linux 技巧: Bash 参数和参数扩展 (Shell)
  5. day-01(html)
  6. Linux 系统编程技巧与概念 第12章 基于 TLV 传输
  7. 谷歌开源缩放模型EfficientNets:ImageNet准确率创纪录,效率提高10倍
  8. Linux无线网络实用工具Top 10
  9. ai人工智能图片修复_潜在客户追踪已中断,以及如何使用AI和自动化进行修复...
  10. 由《炮灰模型——女生选择追求者模型》到“微软钻石题”
  11. IDEA+Java+SSM+Mysql+Bootstrap+Maven实现网上书城系统
  12. php滚动播报,卫星云图滚动播放(实时更新)
  13. 最后一个道士 第二章
  14. 近期研究方向 (内部参考)
  15. 流程图的制作技巧分享,手把手教你如何绘制流程图
  16. IT培训机构如何选择
  17. 批量升级320k百度音乐(java版本)
  18. 第24章 让唯美的雪花飘扬——三维粒子系统的实现
  19. 什么是亚稳态,如何消除?
  20. zTree 一个依靠 jQuery 实现的多功能 “树插件”

热门文章

  1. SQL读写CSV文件
  2. CentOS7系统服务管理systemctl
  3. 利用vSAN Performance Monitor可视化监控vSAN性能指标
  4. php强大的函数,PHP最强大的随机字符串生成函数
  5. axi dma 寄存器配置_STM32 ADC多通道转换的DMA传输示例
  6. Java提高班(五)深入理解BIO、NIO、AIO
  7. HardSoft-Viewer PHP_index.php
  8. 数据中心能耗支出飙升,我们是否真的无能为力?
  9. 【iCore3 双核心板_FPGA】例程二:GPIO输出实验——点亮三色LED
  10. 探究Ubuntu如何存储用户登录密码