Skip to content

654 最大二叉树

给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建:

创建一个根节点,其值为 nums 中的最大值。 递归地在最大值 左边 的 子数组前缀上 构建左子树。 递归地在最大值 右边 的 子数组后缀上 构建右子树。 返回 nums 构建的 最大二叉树 。

题解

和从中序和后序遍历构建二叉树类似,只是这里需要从数组中找出最大值,然后递归构建左右子树。

javascript
var constructMaximumBinaryTree = function(nums) {
    if(!nums.length) {
        return null
    }
    const largestNumber = Math.max(...nums)
    const largestNumberIndex = nums.findIndex(one => one === largestNumber)
    const leftTreeNums = nums.slice(0, largestNumberIndex)
    const rightTreeNums = nums.slice(largestNumberIndex + 1)

    const root = new TreeNode(largestNumber)
    root.left = constructMaximumBinaryTree(leftTreeNums)
    root.right = constructMaximumBinaryTree(rightTreeNums)

    return root
};

上次更新于: