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

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

在这里插入图片描述

java 递归实现

class Solution {
    private HashMap<Integer, Integer> inorderIndexMap;
    private int postorderIndex;

    public TreeNode buildTree(int[] inorder, int[] postorder) {
        inorderIndexMap = new HashMap<>();
        postorderIndex = postorder.length - 1;

        for(int i = 0; i < inorder.length; i++) {
            inorderIndexMap.put(inorder[i], i);
        }

        return Helper(postorder, 0, inorder.length - 1);
    }

    private TreeNode Helper(int[] postorder, int inorderStart, int inorderEnd) {
        if(inorderStart > inorderEnd) return null;
        //首先确定根节点的值
        int rootValue = postorder[postorderIndex--];
        TreeNode root = new TreeNode(rootValue);

        //获取根节点在中序遍历中的索引,用于后面划分左右子树
        int inorderIndex = inorderIndexMap.get(rootValue);

        // 递归构建右子树和左子树
        // 注意:需要先构建右子树,因为后序遍历的顺序是左右根
        root.right = Helper(postorder, inorderIndex + 1, inorderEnd);
        root.left = Helper(postorder, inorderStart, inorderIndex - 1);

        return root;
    }
}

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

相关文章:

  • driftingblues2
  • log4j2的Strategy、log4j2的DefaultRolloverStrategy、删除过期文件
  • Spring Boot日志处理
  • vue2+echarts实现水球+外层动效
  • MySQL初始安装登录:ERROR 2003 (HY000): Can‘t connect to MySQL server on
  • 企业二要素如何用C#实现
  • Rocky Linux 下安装Liboffice
  • 计算机网络 (17)点对点协议PPP
  • Android音频效果处理:基于`android.media.audiofx`包的原理、架构与实现
  • WPF中的Microsoft XAML Behaviors包功能详解
  • 基于 Spring AI 孵化一款 AI 产品
  • 踩坑之服务器时间和本地时间相差8小时
  • C#语言的软件工程
  • 2024年工作总结
  • 2024年6月英语六级CET6写作与翻译笔记
  • UE5 把场景转成HDR图
  • 018-spring-基于aop的事务控制
  • 陕西图纸文档加密软件是如何对图纸进行防泄密保护的呢?
  • 图片叠加拖拽对比展示效果实现——Vue版
  • 高斯核函数(深入浅出)
  • Java 21 优雅和安全地处理 null
  • 短视频矩阵系统贴牌流程全解析
  • java锁
  • FFmpeg 编码和解码
  • 《Java编程入门官方教程》第十六章练习答案
  • 【Spring MVC 核心概念】揭秘概念和整体架构