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

力扣 LeetCode 106. 从中序与后序遍历序列构造二叉树(Day9:二叉树)

解题思路:

前中后序

给前中和后中都可以确定唯一的一棵二叉树

前中:先前 后中

中后:先中 后后

注意区间,统一左闭右开比较好

终止条件: if (postorderStart == postorderEnd) return null;

class Solution {
    public TreeNode buildTree(int[] inorder, int[] postorder) {
        if (inorder.length == 0 || postorder.length == 0) return null;
        return buildHelper(inorder, 0, inorder.length, postorder, 0, postorder.length);
    }

    public TreeNode buildHelper(int[] inorder, int inorderStart, int inorderEnd, int[] postorder, int postorderStart, int postorderEnd) {
        if (postorderStart == postorderEnd) return null;

        int rootValue = postorder[postorderEnd - 1];
        TreeNode root = new TreeNode(rootValue);
        int middleIndex = 0;
        for (middleIndex = 0; middleIndex < inorderEnd; middleIndex++) {
            if (inorder[middleIndex] == rootValue)
                break;
        }

        int leftInorderStart = inorderStart;
        int leftInorderEnd = middleIndex;
        int rightInorderStart = middleIndex + 1;
        int rightInorderEnd = inorderEnd;

        int leftPostorderStart = postorderStart;
        int leftPostorderEnd = postorderStart + (middleIndex - inorderStart);
        int rightPostorderStart = leftPostorderEnd;
        int rightPostorderEnd = postorderEnd - 1;

        root.left = buildHelper(inorder, leftInorderStart, leftInorderEnd, postorder, leftPostorderStart,leftPostorderEnd);
        root.right = buildHelper(inorder, rightInorderStart, rightInorderEnd, postorder, rightPostorderStart,rightPostorderEnd);
        return root;
    }
}


http://www.kler.cn/a/404483.html

相关文章:

  • HarmonyOS鸿蒙系统上File文件常用操作
  • Proxy 在 JavaScript的用法
  • 嵌入式Linux的RTC读写操作应用
  • 主机管理工具 WGCLOUD v3.5.6 更新了哪些特性
  • saas测试跟传统软件测试有什么区别
  • 【力扣热题100】[Java版] 刷题笔记-226. 翻转二叉树
  • MySQL45讲 第二十八讲 读写分离有哪些坑?——阅读总结
  • 第 24 章 -Golang 性能优化
  • 【C++入门(一)】半小时入门C++开发(深入理解new+List+范围for+可变参数)
  • 【GPTs】Front-end Expert:助力前端开发的智能工具
  • 设计模式之 组合模式
  • PCIe总线设计
  • Java中的TreeSet集合解析
  • 计算机毕设-基于springboot的多彩吉安红色旅游网站的设计与实现(附源码+lw+ppt+开题报告)
  • JMeter 性能测试计划深度解析:构建与配置的树形结构指南
  • k8s1.30.0高可用集群部署
  • 04-转录组下游分析-标准化、聚类、差异分析
  • C++真题实战(一)[卡片问题]
  • 动静态库:选择与应用的全方位指南
  • .NET开源实时应用监控系统:WatchDog
  • 《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
  • STM32学习笔记----三极管和MOS管的区别
  • 【人工智能】深度学习入门:用TensorFlow实现多层感知器(MLP)模型
  • 使用 IntelliJ IDEA 编写 Spark 应用程序(Scala + Maven)
  • 基于Spring AI alibaba组件AI问答功能开发示例
  • SpringBoot提交参数去除前后空格