【LeetCode系列】从中序与后序遍历序列构造二叉树 从前序与中序遍历序列构造二叉树...
关注上方“深度学习技术前沿”,选择“星标公众号”,
资源干货,第一时间送达!
105. 从前序与中序遍历序列构造二叉树
根据一棵树的前序遍历与中序遍历构造二叉树。
注意:
- 你可以假设树中没有重复的元素。
例如,输入:
前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
输出:[3,9,20,null,null,15,7]
返回如下的二叉树:
3/ \9 20/ \15 7
前序遍历是根左右,因此preorder第一个元素一定是整个树的根。由于题目说明了没有重复元素,因此我们可以通过preorder[0]去inorder找到根在inorder中的索引pos。
而由于中序遍历是左根右,我们容易找到pos左边的都是左子树,pos右边都是右子树。
Python实现:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = Noneclass Solution:def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:if len(preorder) == 0:return Noneelif len(preorder) == 1:return TreeNode(preorder[0])else:root = TreeNode(preorder[0])#锁定中序遍历中根节点的位置pos = inorder.index(preorder[0])root.left = self.buildTree(preorder[1:pos+1], inorder[:pos])root.right = self.buildTree(preorder[pos+1:], inorder[pos+1:])return root
106. 从中序与后序遍历序列构造二叉树
根据一棵树的中序遍历与后序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
例如,给出
中序遍历 inorder = [9,3,15,20,7]
后序遍历 postorder = [9,15,7,20,3]
返回如下的二叉树:
3/ \9 20/ \15 7
思路和上题类似:
后序遍历是左右根,因此postorder最后一个元素一定是整个树的根。由于题目说明了没有重复元素,因此我们可以通过postorder[-1]去inorder找到根在inorder中的索引pos。
而由于中序遍历是左根右,我们容易找到pos左边的都是左子树,pos右边都是右子树。
Python代码实现:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = Noneclass Solution:def buildTree(self, inorder: List[int], postorder: List[int]) -> TreeNode:if(len(postorder)==0):return Noneelif(len(postorder)==1):return TreeNode(postorder[0])else:root = TreeNode(postorder[-1])pos = inorder.index(postorder[-1])root.left = self.buildTree(inorder[:pos], postorder[:pos])root.right = self.buildTree(inorder[pos+1:], postorder[pos:-1])return root
【LeetCode系列】从中序与后序遍历序列构造二叉树 从前序与中序遍历序列构造二叉树...相关推荐
- LeetCode 刷题之旅(2020.05.22)——105. 从前序与中序遍历序列构造二叉树(中)
LeetCode 刷题之旅(2020.05.22)--105. 从前序与中序遍历序列构造二叉树(中) 题目: 根据一棵树的前序遍历与中序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 例如, ...
- 二叉树的前序、中序、后序遍历与创建
#include <iostream> #include <string> #include <stack> using namespace std; struct ...
- LeetCode--144,94,145,102 二叉树的前序、中序、后序、层序遍历(递归,迭代,栈,队列)
二叉树的前序.中序.后序.层序遍历(递归,迭代,栈,队列) 1. 二叉树的前序遍历 1.1 题目描述 1.2 题目分析 1.3 Python实现 2. 二叉树的中序遍历 2.1 题目描述 2.2 题目 ...
- 如何判断二叉树的前序,中序,后序遍历
文章目录 前言 一.如何判断二叉树的前序,中序,后序遍历? 二.已知二叉树的前序遍历和中序遍历,如何得到它的后序遍历? 三.程序实现 总结 前言 最近复习题中看到二叉树,对于它的前序,中序,后序遍历的 ...
- 非递归实现二叉树的前序、中序、后序遍历
目录 非递归实现二叉树的前序遍历 非递归实现二叉树的中序遍历 非递归实现二叉树的后序遍历 根据二叉树的前序和中序遍历结果还原二叉树 根据二叉树的中序和后序遍历结果还原二叉树 非递归遍历需要借助栈. 非 ...
- 二叉树的前序、中序、后序遍历(递归、非递归写法)
文章目录 一.什么是二叉树? 二.二叉树的基本概念 三.二叉树的三种遍历方式 1.前序遍历(preordertraversal) 1.中序遍历(inordertraversal) 1.后序遍历(pos ...
- 二叉树的前序、中序、后序遍历以及根据前序和中序或中序和后序生成二叉树
二叉树的前序.中序.后序遍历:根据前序和中序或中序和后序生成二叉树 给定如下二叉树: 前序遍历结果:1234567 中序遍历结果:3241657 后序遍历结果:3426751 遍历代码实现:思路:将子 ...
- 一文彻底搞定二叉树的前序、中序、后序遍历(图解递归非递归)
前言 大家好,我是bigsai,在数据结构与算法中,二叉树无论是考研.笔试都是非常高频的考点内容,在二叉树中,二叉树的遍历又是非常重要的知识点,今天给大家讲讲二叉树的层序遍历. 这部分很多人可能会但是 ...
- C语言利用二叉树的操作实现根据给定的字符串生成二叉树并前序、中序、后序输出二叉树。
C语言利用二叉树的操作实现根据给定的字符串生成二叉树并前序.中序.后序输出二叉树. Description 根据给定的字符串生成二叉树并前序.中序.后序此二叉树. Input 给定一字符串,其中#表示 ...
- java根据前序和中序建树_(Java实现)二叉树---根据前序、中序、后序数组还原二叉树...
概述在上一篇文章中讲到顺序存储二叉树,一般是用于完全二叉树,通过统一的数学公式可以将数组还原成完全二叉树 而对于普通的二叉树来说,也可以根据前序.中序和后序遍历得到的数组,还原二叉树 还原还原的情况分 ...
最新文章
- 技术“摸鱼” 大神,国外小哥 5 年白拿 45 万工资!
- Windows 下面的 redis GUI操作工具
- 矛与盾:二进制漏洞攻防思想对抗
- python 数据分析学什么-入门数据分析,我应该学习什么编程语言
- Javascript日期时间总结
- 从内核文件系统看文件读写过程
- selenium与chromedriver的操作
- mysql修改记录_MySQL中如何创建、查看、删除、修改表记录
- linux ext4 inode,Ext4文件系统中inode数量的限制
- String的常用方法
- Smart 200PLC PC Access SMART OPC通信
- 在几何画板中如何制作圆柱的侧面展开动画_怎样用ppt做圆柱的侧面展开动画
- 2021软考-信息处理员知识点汇总
- 【HTB系列】靶机Chaos的渗透测试详解
- 水花兄弟又凑齐了(20220111 Week2-1)
- 一次和前端的相互甩锅的问题记录
- 大型传统企业要不要提升自身的IT研发能力
- (2)勾股数组与单位圆
- Android 程序员的技术栈大全(1),中高级Android面试题目汇总解答
- 去中心化通信简易方案
热门文章
- 别把你的目光停留在周围
- 网络卖家自曝黑幕 “信用刷手”欺骗你
- 食出100分:‘粥’的做法4---鱼片瘦肉粥
- 基于(Mixed)Integer Programming方法的服务组合相关论文实验介绍 (1)
- yolo-mask的损失函数l包含三部分_损失函数总结-应用和trick
- java面向对象示例_JAVA面向对象基础示例
- mysql2005备份_创建完整数据库备份 - SQL Server | Microsoft Docs
- 查看anaconda所用python安装路径conda info --env
- 熵的定义(很好的方法论工具尤其第三熵增益的计算)
- 计算机大师高德纳权威著作《计算机程序设计艺术》影印版精装版已经入库,即将上市!