Daily LeetCode – day0022 0654. Maximum Binary Tree

// 0654. Maximum Binary Tree
class Solution {
    public TreeNode constructMaximumBinaryTree(int[] nums) {
        return construct(nums, 0, nums.length - 1);
    }

    private TreeNode construct(int[] nums, int left, int right) {
        if (left > right) return null;
        if (left == right) return new TreeNode(nums[left]);
        int maxValue = -1;
        int mid = 0;
        for (int i = left; i <= right; ++i) {
            if (nums[i] > maxValue) {
                maxValue = nums[i];
                mid = i;
            }
        }
        TreeNode node = new TreeNode(maxValue);
        node.left = construct(nums, left, mid - 1);
        node.right = construct(nums, mid + 1, right);
        return node;
    }
}
学习笔记:
这是一道二叉树、模拟算法、递归调用、分治的题目。
一开始没有读懂题目,就想着要做成一个二叉堆,后来发现左右方向要和原数组一致,才反应过来为什么题目没有说解不是唯一的任何解都可以。
读清楚题目之后,就变得简单了,就是找最大,然后二分。


关于樊轶群

一个善良的理想主义者。
此条目发表在每日LeetCode分类目录。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注