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

根据一棵树的中序遍历与后序遍历构造二叉树。

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

例如,给出

  • 中序遍历 inorder = [9,3,15,20,7]
  • 后序遍历 postorder = [9,15,7,20,3] 返回如下的二叉树:

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

思路:

后序遍历,最后一个元素一定是根节点。

从后序遍历中找到“中”节点,再在中序遍历中,切割。 

六个步骤:

1. 后序数组为0,那就是空

2. 后序数组最后一个元素为节点元素

3. 寻找中序数组位置作切割点

4. 切割中序数组

5. 切割后序数组(按照中序数组切割出来的,来分)

6. 递归处理左区间和右区间

中序和后序、前序和中序,都可以确定二叉树

但是前序和后序不能确定二叉树,因为左和右分不开,不知道从哪里分开

代码:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right

class Solution:
    def buildTree(self, inorder: List[int], postorder: List[int]) -> TreeNode:
        # 第一步: 特殊情况讨论: 树为空. (递归终止条件)
        if not postorder:
            return None

        # 第二步: 后序遍历的最后一个就是当前的中间节点.
        root_val = postorder[-1]
        root = TreeNode(root_val)

        # 第三步: 找切割点.
        separator_idx = inorder.index(root_val)

        # 第四步: 切割inorder数组. 得到inorder数组的左,右半边.
        inorder_left = inorder[:separator_idx]
        inorder_right = inorder[separator_idx + 1:]

        # 第五步: 切割postorder数组. 得到postorder数组的左,右半边.
        # ⭐️ 重点1: 中序数组大小一定跟后序数组大小是相同的.
        postorder_left = postorder[:len(inorder_left)]
        postorder_right = postorder[len(inorder_left): len(postorder) - 1]

        # 第六步: 递归
        root.left = self.buildTree(inorder_left, postorder_left)
        root.right = self.buildTree(inorder_right, postorder_right)
         # 第七步: 返回答案
        return root

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/681244.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

市场凌乱,智能算法哪种效果好?

当我们在面对市场波动,个股震荡,无从下手的时候,不懂算法的朋友就只懂做t;懂算法的朋友这会儿就迷茫并不知道选择哪种智能算法交易?今天小编给大家整理一套性价比高的,适合个人投资者搞的算法交易&#xff…

成功的期货交易当然离不开自我调节!!!

期货交易的成功不仅仅取决于技术和市场分析,还取决于交易者的心理素质。市场波动和交易决策可能会导致交易者感到压力、恐惧、贪婪等情绪,这可能会影响其决策和行为。因此,交易者需要学会自我调节,以保持心态平稳和冷静&#xff0…

如何在Weblogic环境中启动认证方式对接Zabbix监控

在WebLogic Server中,启动认证可用于确保只有经过授权的用户和系统能够访问WebLogic Server及其应用程序,通过合理配置认证提供者和安全领域,管理员可以有效管理和控制用户访问。 本文将详细介绍如何在Weblogic环境中配置启动认证并对接Zabb…

Opencv Python图像处理笔记二:图像变换、卷积、形态学变换

文章目录 前言一、几何变换1.1 缩放1.2 平移1.3 旋转1.4 翻转1.5 仿射1.6 透视 二、低通滤波2.1 均值滤波2.2 高斯滤波2.3 中值滤波2.4 双边滤波2.5 自定义滤波 三、高通滤波3.1 Sobel3.2 Scharr3.3 Laplacian3.4 Canny 四、图像金字塔4.1 高斯金字塔4.2 拉普拉斯金字塔 五、形…

眼底照 + OCT图 + 精神状态 ,预测阿尔兹海默症

眼底照片和OCT图像,预测阿尔兹海默症 数据多模态网络模型集成可视化分析 论文:https://www.ophthalmologyretina.org/action/showPdf?piiS2468-6530%2824%2900045-9 目前,认知障碍的诊断依赖于血清和蛋白质生物标志物的检测、脑脊液检查和正…

充电宝哪款质量好性价比高?精选四大宝藏款充电宝分享

在这个快节奏的数字时代,智能手机、平板电脑等电子设备已成为我们日常生活与工作中不可或缺的伙伴。然而,电量焦虑似乎也如影随形,时刻考验着我们的耐心与行程安排。于是,一款质量上乘、性价比高的充电宝便成了许多人的随身必备“…

超实用!新手必看的色彩设计指南

在UI设计中,色彩设计扮演着非常重要的角色,它不仅可以为用户带来视觉上的愉悦体验,还可以影响用户的情绪、行为和注意力。通过运用不同的色彩搭配和调性,设计师可以引导用户的注意力,突出重点内容或功能,提…

告别鼠标:蓝牙无线安卓模拟鼠标,绘图板,手写板操作电脑PC端,卡卡罗特也说好,儿童节快乐

家人们,上链接了:https://download.csdn.net/download/jasonhongcn/89387887 横屏模式: 竖屏模式: 操作说明: 1. 手势滑动模拟鼠标移动 2. 界面如果有滚动条,右手指按紧,通过左手指移动实现…

Spring Security 注册过滤器关键点与最佳实践

在 Spring Security 框架中,注册过滤器是实现身份验证和授权的关键组件。正确配置和使用注册过滤器对于确保应用程序的安全性至关重要。以下是一些关于 Spring Security 注册过滤器的注意事项和最佳实践。 过滤器链顺序: 注册过滤器通常位于过滤器链的末…

揭秘业务系统数据安全三大核心问题:“谁在用”、“用什么”和“怎么用”

数据库宛如一座坚固的宝库,守护着无尽的智慧与财富—数据,如同熠熠生辉的金币。当宝库的门紧闭时,金币得以安然无恙。 然而,在业务系统的广阔天地中,这些数据金币被精心挑选、流通使用,每一枚都承载着无尽…

eNSP学习——RIP路由协议基础配置

目录 主要命令 原理概述 实验内容 实验目的 实验拓扑 实验编址 实验步骤 1、基本配置 2、使用RIPv1搭建网络 开启 RIP调试功能 3、使用RIPv2搭建网络 RIPv1和RIPv2的不同 需要eNSP各种配置命令的点击链接自取:华为eNSP各种设备配置命令大全PD…

栈排序00

题目链接 栈排序 题目描述 注意点 对栈进行排序使最小元素位于栈顶最多只能使用一个其他的临时栈存放数据不得将元素复制到别的数据结构(如数组)中栈中的元素数目在[0, 5000]范围内 解答思路 本题是要实现一个小顶堆,可以直接使用Priori…

Linux C语言: 数据类型

一、 为什么要引入数据类型 • 计算机中每个字节都有一个地址(类似门牌号) • CPU通过 地址 来访问这个字节的空间 0x20001103 1 0 0 1 0 0 1 1 0x20001102 1 1 1 0 1 1 1 0 0x20001101 1 1 1 1 0 1 0 1 0x20001100 0 …

掌握ChatGPT的正确打开方式

引言 随着人工智能技术的飞速发展,自然语言处理(NLP)领域取得了显著的突破。其中,聊天生成预训练变换器(ChatGPT)作为一种新型的对话式AI模型,引起了广泛关注。本文将详细介绍ChatGPT的正确使用…

linux业务代码性能优化点

planning优化的一些改动----------> 减少值传递&#xff0c;多用引用来传递 <---------- // ----------> 减少值传递&#xff0c;多用引用来传递 <---------- // 例1&#xff1a; class A{}; std::vector<A> v; // for(auto elem : v) {} // 不建议&#xff…

视频监控汇聚平台LntonCVS国标GB28181协议实现语音对讲功能

在当今这个智能技术飞速发展的时代&#xff0c;人工智能已经成为了电子产品领域的一股不可忽视的热门趋势。随着科技的不断进步&#xff0c;越来越多的电子产品开始融入人工智能技术&#xff0c;从而为其开拓了全新的发展路径。在这个大背景下&#xff0c;安防摄像头无插件直播…

Mitmproxy作为瑞士军刀可拦截、检查、修改和重放网络流量可用于渗透测试。

Mitmproxy是一个开源的中间人代理工具&#xff0c;用于拦截、修改和查看HTTP和HTTPS流量。它可以用于调试、测试和分析网络应用程序和移动应用程序的通信。 Mitmproxy可以在本地计算机上作为一个代理服务器运行&#xff0c;将所有流量导向到它&#xff0c;然后可以查看和修改这…

CA到TA的调用流程是什么?如何实现的?

快速链接: . &#x1f449;&#x1f449;&#x1f449;Trustzone/TEE/安全 面试100问-目录 &#x1f448;&#x1f448;&#x1f448; 付费专栏-付费课程 【购买须知】:联系方式-加入交流群 ----联系方式-加入交流群 个人博客笔记导读目录(全部) 简单一点来说&#xff0c;CA…

电器公司2套PROE如何满足20人使用?

电器公司的日常运营高度依赖于各类软件工具&#xff0c;其中PROE作为广泛应用于产品设计领域的软件&#xff0c;在电器厂公司的生产流程中扮演着举足轻重的角色。如何合理配置和管理PROE软件资源&#xff0c;以满足20人同时使用的需求&#xff0c;是许多电器厂公司面临的实际问…

比瓴科技以何魅力吸引安全大牛?

今年4月&#xff0c;专注于软件供应链安全的行业领导厂商比瓴科技宣布&#xff0c;与元豚科技战略合并&#xff0c;元豚科技创始人唐誉聪加入比瓴&#xff0c;担任合伙人及研发副总裁一职。唐誉聪表示&#xff0c;将携手比瓴共同推动持续应用安全平台(ASPM)的发展&#xff0c;将…