105. 从前序与中序遍历序列构造二叉树

根据前序遍历和中序遍历,我们可以发现前序遍历的第一个元素就为根元素,在中序遍历中找到这个元素,那么中序遍历中左边为根元素的左子树,右边为右子树,依次递归。

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode(int x) { val = x; }* }*/
class Solution {public TreeNode buildTree(int[] preorder, int[] inorder) {int len1 = preorder.length-1;int len2 = inorder.length-1;TreeNode root = bulidTree(preorder,0,len1,inorder,0,len2);return root;}public TreeNode bulidTree(int[] preorder, int start1,int end1,int[] inorder,int start2, int end2){if(start1>end1 || start2>end2){return null;}TreeNode node = new TreeNode(preorder[start1]);for(int k = start2; k<=end2; k++){if(preorder[start1] == inorder[k]){node.left = bulidTree(preorder,start1+1,start1+k-start2,inorder,start2,k-1);node.right = bulidTree(preorder,start1+k-start2+1,end1,inorder,k+1,end2);}}return node;}
}

106. 从中序与后序遍历序列构造二叉树

类似上一题的思路。后序遍历的最后一个节点即为根节点,在中序遍历中找到,然后中序遍历左边为根节点左子树,右边为根节点右子树。

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode(int x) { val = x; }* }*/
class Solution {public TreeNode buildTree(int[] inorder, int[] postorder) {int len1 = inorder.length-1;int len2 = postorder.length-1;return bulid(inorder,0,len1,postorder,0,len2);}public TreeNode bulid(int[] p1,int start1, int end1,int[] p2,int start2, int end2){if(start1>end1||start2>end2) return null;int mid=0;for(int i=start1;i<=end1;i++){if(p1[i]==p2[end2]){mid = i;break;}}TreeNode node = new TreeNode(p2[end2]);node.left = bulid(p1,start1,mid-1,p2,start2,mid-start1+start2-1);node.right = bulid(p1,mid+1,end1,p2,end2-end1+mid,end2-1);return node;}
}

转载于:https://www.cnblogs.com/dong973711/p/10887392.html

前序与中序遍历序列构造二叉树 中序与后序遍历序列构造二叉树相关推荐

  1. 9判断整数序列是不是二元查找树的后序遍历结果

    转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4252095.html 声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己 ...

  2. [Leedcode][JAVA][第236题][二叉树的公共祖先][后序遍历][BFS]

    [问题描述] 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先.百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x,满足 x 是 p. ...

  3. 【二叉树的迭代版后序遍历】LeetCode 145. Binary Tree Postorder Traversal

    LeetCode 145. Binary Tree Postorder Traversal Solution1:递归版答案 二叉树的后序遍历递归版是很简单的,关键是迭代版的代码既难理解又难写!但听了花 ...

  4. 二叉树的非递归后序遍历(双栈法和双指针法,有图有真相)

    一,前言 本文是原创作品,可能存在不足,欢迎大家指正,礼貌交流,感激不尽. 二,思路 二叉树后序遍历不同于前序遍历和中序遍历,后序遍历是三者之间最难的.下面就让我们来梳理一下代码的逻辑,看看如何轻松地 ...

  5. 判断整数序列是不是二元查找树的后序遍历结果

    题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果. 如果是返回true,否则返回false. 例如输入5.7.6.9.11.10.8,由于这一整数序列是如下树的后序遍历结果: 8 ...

  6. 【LeetCode系列】从中序与后序遍历序列构造二叉树 从前序与中序遍历序列构造二叉树...

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 105. 从前序与中序遍历序列构造二叉树 根据一棵树的前序遍历与中序遍历构造二叉树 ...

  7. 105从前序与中序遍历序列构造二叉树 106 从中序与后序遍历序列构造二叉树 (递归 + 哈希)

    引言 这两道题主要是考察二叉树遍历的掌握,即由前序和中序推出原二叉树,由后序和中序推出原二叉树,这里先来说一下推导过程: 前序和中序 知道前序遍历和中序遍历,如何推原二叉树?(直接是结论,可以自行推导 ...

  8. java二叉树合并_Java(树的前中后序遍历构造二叉树题型整合)前序和中序、中序和后序、前序和后序遍历序列构造二叉树算法整合归纳...

    前言 二叉树各种花里胡哨的算法题真的把我搞晕了,今天特地整理出一类有关二叉树的算法题,希望能帮助阅读到此文章的人,今后不再受此类题型的困扰. 一.题目类型 已知二叉树的两种遍历序列,请根据该序列构建二 ...

  9. 【中序、后序遍历序列】【前序、中序遍历序列】构造二叉树

    前置知识 第1点:每一个节点都可以看作一棵树的根节点. 第2点:掌握前序.中序.后序遍历顺序.前序遍历:根左右,中序遍历:左根右,后序遍历:左右根. 第3点:掌握双指针或者说滑动窗口,窗口所承载的是左 ...

  10. 由序列确定二叉树:前序序列和中序序列构造二叉树 后序序列和中序序列构造二叉树 层次遍历序列和中序遍历序列构造二叉树 代码实现(c语言)

    下面三种序列可以唯一的构造唯一的一棵二叉树: 前序序列和中序序列构造二叉树 后序序列和中序序列构造二叉树 层次遍历序列和中序遍历序列构造二叉树 #include<stdio.h> #inc ...

最新文章

  1. 【蓝桥java】进制与整除之尼姆堆
  2. Uber 前无人驾驶工程师告诉你,国内无人驾驶之路还要走多久?
  3. Django连接数据mysql
  4. Android线程实例讲解
  5. 基于STC8H1K28的双轴机械臂驱动模块:步进电机42HS348E,BH32角度传感器
  6. mysql 常用命令 | 表间 弱关联 join
  7. @value 静态变量_Spring注解驱动开发之八——@Value属性赋值、@PropertySource 加载外部配置文件...
  8. [leetcode] 101. 对称二叉树
  9. 基本数据类型与String之间的转换
  10. 编写一个求方程ax2 + bx + c = 0的根 的程序,用3个函数分别求当b2-4ac大于零、等于零、和小于零时的方程的根。要求从主函数输入a,b,c的值并输出结果。
  11. Tensorflow 十六 用tf.keras函数重写Mnist识别
  12. 截取视频段转换为GIF动图
  13. ElasticSearch启动报错at least one of [discovery.seed_hosts, discovery.seed_provid---ElasticSearch工作笔记032
  14. 多Resource文件的相互引用与合并问题及其解决方案
  15. 【数据结构笔记46】Sort with Swap(0,*)只允许交换0的排序
  16. weex android 滑动事件,【报Bug】weex编译模式下slider组件 @scroll 事件, 滑块左右滑动, @scroll 回调的值始终是负数, 判断不了左右动作...
  17. java ftp 上传文件 无效_java实现FTP文件上传出现的问题
  18. Lintcode---二叉树的最大深度
  19. js 中通过 var 在声明的变量中写方法
  20. 手机怎么将图片转换成word文档

热门文章

  1. 研究了一下WORD的斜体,角度约20度
  2. 老板平常多说点好听的
  3. 编译OpenJDK8-u302出错:error C3861: “INT64_C”: 找不到标识符
  4. IDEA给项目添加lib/jar
  5. LINUX下载编译OpenSSL
  6. 错误解决办法:‘NULL’ was not declared in this scope
  7. 解决办法:gtk_image_menu_item_set_image()菜单图标无法显示
  8. 光绪变法为什么没成功
  9. C中error的使用
  10. 智力与体力的人种矛盾