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

LeetCode[106]从中序和后序遍历序列构造二叉树

思路:

我觉得这种题还是要找好边界,这道题和从中序和前序遍历序列构造二叉树差不多,就是后序遍历和前序遍历是反着来的,后序遍历最后一个是头节点,然后递归时中序遍历的处理逻辑没什么变化,唯一有变化的是后序遍历的递归逻辑,在后序遍历中确认左子树和右子树的范围,左子树范围是头节点---头节点+左子树长度-1,右子树范围头节点+左子树长度---尾节点-1。

代码:

/*** 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> map;public TreeNode buildTree(int[] inorder, int[] postorder) {map = new HashMap<>();for (int i = 0; i < inorder.length; i++) {map.put(inorder[i], i);}return helper(inorder, postorder, 0, inorder.length - 1, 0, postorder.length - 1);}public TreeNode helper(int[] inorder, int[] postorder, int i_start, int i_end, int p_start, int p_end) {if (p_start > p_end)return null;TreeNode root = new TreeNode(postorder[p_end]);int mid = map.get(postorder[p_end]);int leftLength = mid - i_start;root.left = helper(inorder, postorder, i_start, mid - 1, p_start, p_start + leftLength - 1);root.right = helper(inorder, postorder, mid + 1, i_end, p_start + leftLength, p_end - 1);return root;}
}

相关文章:

  • 考研好?还是找工作好?
  • 动态BGP服务器的用途都有什么?
  • Lombok 介绍
  • 33-Oracle Parallel 并行处理的选择和实践
  • 31-Oracle 23 ai-Unrestrict Parallel DML(无限制并行DML)
  • SAP复制一个自定义移动类型
  • 篇章七 论坛系统——业务开发——前端
  • Python 中的 `lru_cache` 详解
  • 掌握应用分层:高内聚低耦合的艺术
  • Python with 关键字
  • 【FineDance】ModuleNotFoundError: No module named ‘pytorch3d‘
  • 数据目录:企业数据管理的核心引擎与最佳实践
  • Linux02
  • Linux Docker的环境配置与简单使用
  • 【Day48】
  • Docker 在尝试连接 Docker Hub 时遇到网络问题(超时)
  • 27 - ASPP模块
  • TI 毫米波雷达走读系列—— 3DFFT及测角
  • 疫菌QBD案例
  • Spring-rabbit重试消费源码分析
  • 衡阳网站建设/今日网站收录查询
  • 做山西杂粮的网站/宁波网络营销策划公司
  • 做网站的模仿还要去量宽高吗/必应搜索引擎入口
  • 做网站上传信息软件/互联网广告营销
  • 湘潭网站优化/全网关键词云查询
  • 成都企业做网站/做一个网站需要多少钱