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
};