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

解题思路:

前中后序

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

前中:先前 后中

中后:先中 后后

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

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

java 复制代码
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;
    }
}
相关推荐
leing1234 分钟前
14. 最长公共前缀-leetcode
linux·服务器·leetcode
梓德原5 分钟前
【C语言】C语言如何向系统接要存
java·c语言·算法
却话巴山夜雨时i10 分钟前
84. 柱状图中最大的矩形【困难】
算法
学困昇12 分钟前
Linux基础开发工具(上):从包管理到“进度条”项目实战,掌握 yum/vim/gcc 核心工具
linux·运维·开发语言·数据结构·c++·vim
浅川.2514 分钟前
xtuoj Interprime
算法
兩尛14 分钟前
HJ52 计算字符串的编辑距离
java·开发语言·算法
cici1587415 分钟前
基于LCMV的自适应波束形成算法仿真实现
算法
know__ledge18 分钟前
吴恩达机器学习2022 -- Course1 -- Week3(分类问题)
人工智能·算法·目标检测·机器学习·分类
星释22 分钟前
Rust 练习册 105:从零开始实现链表数据结构
数据结构·链表·rust
良木生香25 分钟前
【数据结构-初阶】详解算法复杂度:时间与空间复杂度
数据结构