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

一、核心思路

基于后序遍历「左→右→根」的特性,后序数组最后一个元素是整棵树的根节点;结合中序遍历「左→根→右」的特性,可通过节点在中序数组中的索引判断左右子树归属。

具体实现时,反向遍历后序数组(遍历顺序为「根→右→左」),用栈记录待处理的节点,通过哈希表快速定位节点在中序数组的索引:若当前节点索引大于栈顶节点索引,说明是栈顶的右子节点;若更小,则回溯栈找到父节点,作为父节点的左子节点,最终迭代完成整棵树的构建。

二、方法核心优点

  1. 无栈溢出风险:全程采用迭代逻辑,函数调用栈仅一层,避免了递归法因节点数过多(如3000层链式树)导致的系统栈溢出问题;同时用于记录节点的栈结构分配在堆内存中,堆空间远大于系统栈,完全适配题目节点数上限。

  2. 时间效率高:通过数组模拟哈希表(偏移3000处理负数),实现O(1)时间复杂度查找节点在中序数组的索引,相比递归法的线性查找大幅提升效率;整体仅需一次遍历后序数组,时间复杂度为O(n),远优于未优化的递归法(O(n²))。

  3. 逻辑简洁易理解:核心逻辑集中在一个循环内,无需拆分左右子树范围、传递复杂的递归参数,仅通过中序索引大小即可判断节点的父子关系,直观且不易出错。

  4. 内存安全可控:堆内存分配的栈结构用完后可主动释放,避免内存泄漏;节点按需创建,无冗余内存占用,相比递归法由系统管理栈帧的方式,内存使用更可控。

  5. 适配性强:通过索引偏移处理负数节点值,兼容题目中-3000~3000的数值范围;核心逻辑无需修改即可适配1~3000节点的所有输入场景,相比需要调整系统栈大小的递归法,适配性更强。

三、与先序+中序迭代法的核心关联

两种方法逻辑完全对称:仅根节点位置(先序首元素/后序尾元素)、遍历方向(先序正序/后序逆序)、子节点判断条件(左子节点索引更小/右子节点索引更大)不同,核心都是通过栈记录节点、哈希表快速定位索引,规避递归缺陷的同时保证高效性。

相关推荐
鹿角片ljp4 分钟前
力扣14.最长公共前缀-纵向扫描法
java·算法·leetcode
Remember_9939 分钟前
【数据结构】深入理解优先级队列与堆:从原理到应用
java·数据结构·算法·spring·leetcode·maven·哈希算法
52Hz1181 小时前
二叉树理论、力扣94.二叉树的中序遍历、104.二叉树的最大深度、226.反转二叉树、101.对称二叉树
python·算法·leetcode
普贤莲花1 小时前
新生2026年1月20日---星期二(大寒)
程序人生·算法·leetcode
wen__xvn2 小时前
基础算法集训第04天:选择排序和冒泡排序
数据结构·算法·leetcode
nju_spy4 小时前
力扣每日一题 2026.1
算法·leetcode·二分查找·动态规划·最小生成树·单调栈·最长公共子序列
Remember_9934 小时前
【LeetCode精选算法】二分查找专题一
java·数据结构·算法·spring·leetcode·哈希算法
这就是佬们吗4 小时前
力扣---leetcode48
java·笔记·后端·算法·leetcode·idea
期末考复习中,蓝桥杯都没时间学了5 小时前
力扣刷题记录3
算法·leetcode·职场和发展
Remember_9935 小时前
【数据结构】Java对象比较全解析:从equals到Comparable与Comparator,再到PriorityQueue应用
java·开发语言·数据结构·算法·leetcode·哈希算法