当前位置: 首页 > news >正文

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

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

文章目录

  • 题目描述
  • 思路
  • 复杂度
  • Code

题目描述

在这里插入图片描述在这里插入图片描述

思路

具体思路参考:
Problem: 力扣105. 从前序与中序遍历序列构造二叉树

再后序遍历中:每次取int rootVal = postorder[postEnd];构造根节点;左子树的范围是build(inorder, inStart, index - 1, postorder, postStart, postStart + leftSize - 1);右子树范围为build(inorder, index + 1, inEnd, postorder, postStart + leftSize, postEnd - 1)

复杂度

时间复杂度:

O ( n ) O(n) O(n);其中 n n n为树节点的个数

空间复杂度:

O ( h e i g h ) O(heigh) O(heigh);其中 h e i g h t height height为树的高度

Code

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {Map<Integer, Integer> valToIndex = new HashMap<>();public TreeNode buildTree(int[] inorder, int[] postorder) {for (int i = 0; i < inorder.length; ++i) {valToIndex.put(inorder[i], i);}return build(inorder, 0, inorder.length - 1,postorder, 0, postorder.length - 1);}TreeNode build(int[] inorder, int inStart, int inEnd, int[] postorder, int postStart, int postEnd) {if (inStart > inEnd) {return null;}// The value of the  root node is the last element of the post-order traversal groupint rootVal = postorder[postEnd];// rootVal traverses the index in the group in medium orderint index = valToIndex.get(rootVal);// Number of nodes in the left subtreeint leftSize = index - inStart;TreeNode root = new TreeNode(rootVal);root.left = build(inorder, inStart, index - 1, postorder, postStart, postStart + leftSize - 1);root.right = build(inorder, index + 1, inEnd, postorder, postStart + leftSize, postEnd - 1);return root;}
}

相关文章:

  • 代码随想录算法训练营第五十三天||1143.最长公共子序列、1035.不相交的线、53. 最大子序和
  • 20240523金融读报:跨境支付规模扩大银行服务科创企业举措
  • 摸鱼大数据——Hive表操作——分区表
  • 618有什么宠物空气净化器推荐?希喂FreAir Lite宠物空气净化器真实体验
  • linux系统部署Oracle11g:netca成功启动后1521端口未能启动问题
  • 论文精读:TASKBENCH: BENCHMARKING LARGE LANGUAGE MODELS FOR TASK AUTOMATION
  • 什么是知识中台?为什么企业需要知识中台?
  • js检验一个字符串是否是正确时间格式的工具方法
  • Linux信号机制与docker应用
  • OrangePi AIpro初识及使用大模型GPT-Neo-1.3B测试
  • 常见排序算法之插入排序
  • leetcode——169.多数元素(多解法)
  • 回溯算法05(leetcode491/46/47)
  • 消防体验馆升级,互动媒体点亮安全之路!
  • MySQL--复合查询
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • Laravel Mix运行时关于es2015报错解决方案
  • LeetCode算法系列_0891_子序列宽度之和
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • SQLServer之索引简介
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • 和 || 运算
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 技术胖1-4季视频复习— (看视频笔记)
  • 那些年我们用过的显示性能指标
  • 试着探索高并发下的系统架构面貌
  • 手写双向链表LinkedList的几个常用功能
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • MPAndroidChart 教程:Y轴 YAxis
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ‌‌雅诗兰黛、‌‌兰蔻等美妆大品牌的营销策略是什么?
  • #php的pecl工具#
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (9)STL算法之逆转旋转
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (论文阅读30/100)Convolutional Pose Machines
  • (七)Java对象在Hibernate持久化层的状态
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (学习日记)2024.01.19
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • **PHP分步表单提交思路(分页表单提交)
  • @ConfigurationProperties注解对数据的自动封装
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • [20170713] 无法访问SQL Server
  • [AIGC] Java 和 Kotlin 的区别
  • [android] 切换界面的通用处理
  • [bbk5179]第66集 第7章 - 数据库的维护 03
  • [BZOJ] 2044: 三维导弹拦截