首页 > 其他分享 >105. 从前序与中序遍历序列构造二叉树

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

时间:2022-10-17 09:12:33浏览次数:55  
标签:preorder 遍历 root 中序 二叉树 inorder 105

题目描述

给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。

image

输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
输出: [3,9,20,null,null,15,7]

思路分析

对于这类题我们还是思考二叉树的解题步骤:

  • 能够遍历解决
  • 能否递归解决
  • 每个节点需要做什么

解题步骤

  1. 对于前序遍历,我们可以很容易的发现根节点,根节点也就是第一个元素。
  2. 之后通过中序遍历找到其中的根节点,那么再根节点左侧的也就是它的左子树,右侧的则就是右子树。
  3. 获取左子树的长度,也就在中序遍历中索引从0开始一直到root的长度,我们可以通过indexOf来获取长度,索引即位长度。
  4. 之后在先序遍历的结果中截取出左子树和右子树,左子树的第一个元素即为root元素。
  5. 同样的,右子树也是通过先序遍历得到的,那同样也可以获取右子树的root
  6. 之后通过递归完成,退出条件则是其中任意一个数组的长度为0

参考代码

var buildTree = function(preorder, inorder) {
	if (preorder.length === 0) return null;
	let tmp = preorder[0];
	let sz = inorder.indexOf(tmp); //通过索引来获取左侧部分的长度
	let root = new TreeNode(tmp);
	root.left = buildTree(preorder.slice(1, sz + 1), inorder.slice(0, sz));
	root.right = buildTree(preorder.slice(sz + 1), inorder.slice(sz + 1));
	return root;
};

标签:preorder,遍历,root,中序,二叉树,inorder,105
From: https://www.cnblogs.com/zx529/p/16797922.html

相关文章

  • |软件技术基础|<>||-----------|-----------||介绍我自己|<详细的介绍我自己的兴趣爱
    软件技术基础https://edu.cnblogs.com/campus/zjlg/22rjjc这个作业的目标<了解博客园,详细的介绍我自己>姓名-学号<王芳>-<2020330301057>一、自我介......
  • C++二叉树动画演示
    C++二叉树动画演示题目2:基于前序、中序、后序序列构造二叉树需求:1、任意输入前序+中序序列或者中序+后序序列,生成二叉树,请使用三叉链表,在构造链表的过程中同步更新每......
  • 【数据结构】二叉树的概念和简单实现(仅供学习交流使用)
    1、树1、树的概念   树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝......
  • 给你一个二叉树的根节点 root , 检查它是否轴对称。
    用两个指针去遍历这棵树,(并使用深度优先中序遍历方法)一个指针从左方向开始遍历,一个指针从右方向开始遍历。比较结构与数据#Definitionforabinarytreenode.#class......
  • #yyds干货盘点# LeetCode 热题 HOT 100:二叉树的中序遍历
    题目:给定一个二叉树的根节点root,返回它的中序 遍历。 示例1:输入:root=[1,null,2,3]输出:[1,3,2]示例2:输入:root=[]输出:[]示例3:输入:root=[1]输出:[1]代码实现:cla......
  • 654. 最大二叉树
    题目描述给定一个不重复的整数数组 nums。 最大二叉树 可以用下面的算法从 nums递归地构建:创建一个根节点,其值为 nums中的最大值。递归地在最大值 左边 的 ......
  • 层序遍历递归删除二叉树
    层序遍历递归删除二叉树什么是递归删除?从叶节点开始向根节点的方向逐层删除。直观的讲,对于以下二叉树,递归删除的次序为:f->g->h->i->d->e->b->c->a递......
  • 树与二叉树
    二叉树性质:度为0的节点比度为2的节点多一个。解释:度为1的节点均可忽略;度为2的节点就相当于分割点,而度为0的节点就相当于线段;不分割时即有一条线段,当每多一个分割点时,线段......
  • 广义表转二叉树
    前序遍历和中序遍历&后序遍历和中序遍历可以还原出唯一的二叉树,而前序遍历和后序遍历不行(满二叉树时貌似可以,但只有一个根节点和一个子孩子时一定不行)//输入:A(B(,D),......
  • 数据结构:二叉树
    定义特点每个节点最多有两棵子树,所以二叉树中不存在度大于2的节点。左子树和右子树是有区别的,次序不能颠倒。即使某个节点只有1个子节点,也是有左右之分的。特殊的......