给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建:
创建一个根节点,其值为 nums 中的最大值。
递归地在最大值 左边 的 子数组前缀上 构建左子树。
递归地在最大值 右边 的 子数组后缀上 构建右子树。
返回 nums 构建的 最大二叉树 。
输入:nums = [3,2,1,6,0,5]
输出:[6,3,5,null,2,0,null,null,1]
解释:递归调用如下所示:
这道题和上一道(中序和后序构建二叉树),原理上十分类似,都是递归构造,这个甚至更简单一点,定位到中间节点后再分左右就好了
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func constructMaximumBinaryTree(nums []int) *TreeNode {
if len(nums) < 1 {
return nil
}
index := findMax(nums)
root := &TreeNode{
Val: nums[index],
Left: constructMaximumBinaryTree(nums[:index]),
Right: constructMaximumBinaryTree(nums[index+1:]),
}
return root
}
func findMax(nums []int) int {
index := 0
for i := 1; i < len(nums); i++ {
if nums[i] > nums[index] {
index = i
}
}
return index
}