首先我们要知道前序遍历,中序遍历生成二叉树的顺序:

前序遍历:先遍历根节点

再遍历左子树

最后遍历右子树

中序遍历:先遍历左子树

再遍历根节点

最后遍历右子树

我们理一理不用编程的思路来看这个问题:

因为二叉树的根节点是在前序遍历的第一位,我们可以先取前序遍历第一位在中序遍历中定位根节点,可以得到左子树的节点数和右子树的节点数

然后重复这种运算就构造二叉树,也就是递归。

我们看下面的二叉树

前序遍历为:3,9,20,15,7

中序遍历为:9,3,15,20,7

public TreeNode buildTree(int[] preorder, int[] inorder) {return buildTreeHelper(preorder, 0, preorder.length, inorder, 0, inorder.length);
}private TreeNode buildTreeHelper(int[] preorder, int p_start, int p_end, int[] inorder, int i_start, int i_end) {// preorder 为空,直接返回 nullif (p_start == p_end) {return null;}int root_val = preorder[p_start];TreeNode root = new TreeNode(root_val);//在中序遍历中找到根节点的位置int i_root_index = 0;for (int i = i_start; i < i_end; i++) {if (root_val == inorder[i]) {i_root_index = i;break;}}int leftNum = i_root_index - i_start;//递归的构造左子树root.left = buildTreeHelper(preorder, p_start + 1, p_start + leftNum + 1, inorder, i_start, i_root_index);//递归的构造右子树root.right = buildTreeHelper(preorder, p_start + leftNum + 1, p_end, inorder, i_root_index + 1, i_end);return root;
}

别问,问就是力扣刚学的,掌握还是不太熟练,单纯防止自己划水,欢迎斧正。

暑假博客二:由前序中序遍历生成二叉树相关推荐

  1. 二叉树题目 ----7 前序中序遍历构造二叉树

    前序中序遍历构造二叉树 思路 在前序中找根结点 根据根结点 + 中序,分成左右两棵子树 根据子树长度,把前序分成左右两颗子树 递归处理子树 /*** Definition for a binary t ...

  2. 二叉树 | 根据前序中序遍历重建二叉树

    Thinking 如果给你一颗二叉树的前序序列和中序序列,让你输出它的后序序列,你会怎么做呢? 也许很多同学能够很快的在纸上将一颗简单的二叉树画出来,但如果真正让你将自己的思路转换为算法,你会去怎样实 ...

  3. 中序遍历java6_Java 通过先序和中序遍历生成二叉树

    题目 二叉树的前序以及后续序列,以空格间隔每个元素,重构二叉树,最后输出二叉树的三种遍历方式的序列以验证. 输入: 1 2 3 4 5 6 7 8 9 10 3 2 5 4 1 7 8 6 10 9 ...

  4. 二叉树的前序遍历,二叉树的中序遍历,二叉树的后序遍历,二叉树的层序遍历

    二叉树的前序遍历 144. 二叉树的前序遍历 - 力扣(LeetCode) (leetcode-cn.com) 给你二叉树的根节点 root ,返回它节点值的 前序 遍历. 示例 1: 输入:root ...

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

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

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

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

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

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

  8. [Leetcode][第99题][JAVA][恢复二叉搜索树][中序遍历]

    [问题描述][困难] [解答思路] 1. 显示中序遍历 时间复杂度:O(N) 空间复杂度:O(N) class Solution {public void recoverTree(TreeNode r ...

  9. leetcode105 前序中序遍历序列构造二叉树

    根据一棵树的前序遍历与中序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15 ...

最新文章

  1. 4g内存只有1.6g可用_32位系统可用内存小 遇到32位系统内存小的解决方法
  2. C语言函数集(十七)
  3. 设计模式总结 (5)行为型模式续
  4. java从小到大排序函数_利用随机函数产生10个1~100之间的整数,按从小到大的顺序排列输出...
  5. 陕西理工大学计算机科学与技术系,陕西理工大学计算机科学与技术专业2016年在陕西理科高考录取最低分数线...
  6. 我的面试题-软件测试基础
  7. 简述使jdbc连接mysql数据库,关于JDBC的六个步骤
  8. pgadminIII 的基本操作
  9. C# MessageQueue例子
  10. 深入浅出MySQL规范
  11. 【PART 1】OAK-D+TurtleBot3机器人项目全解析:SLAM、ROS、深度图、点云。
  12. git/github教程
  13. 深度剖析头条面试真题 | 二叉树那点事儿
  14. Wincc 编辑颜色对应c脚本返回的十进制数
  15. tensorflow语义分割计算mIoU时忽略某一类别
  16. kali安装burpsuite专业版
  17. 《项目管理中国式漫画》读后感
  18. 查oracle的tps,Oracle TPS指标
  19. Laravel配置系统默认Log路径--Star.hou
  20. 【ROS】官方tf教程turtle_tf2源码原理解读

热门文章

  1. 浪潮服务器安装双系统,求(win和linux)的双系统安装过程
  2. c++多线程之_beginthreadex
  3. 知昨日之非,悟今日之是!焉知昨日之非为非,今日之是为是?
  4. 易语言修改服务器数据库连接,sql开发管理软件 易语言 易语言连接sql数据库
  5. 初学h5 一些小常识
  6. BitBlt函数解析
  7. 网页浏览器的搜索引擎及算法(包括网页,App内,后台数据等)
  8. 室内场景示意图绘制(Floorplanner的简单操作)
  9. AutoForm v4.11-ISO 1CD(专业板金优化分析软件,好用!)
  10. 打靶归来 - 详解upload-labs靶场(下)