Skip to main content

最大二叉树

给定一个不含重复元素的整数数组 nums 。一个以此数组直接递归构建的 最大二叉树 定义如下:

  1. 二叉树的根是数组 nums 中的最大元素。
  2. 左子树是通过数组中 最大值左边部分 递归构造出的最大二叉树。
  3. 右子树是通过数组中 最大值右边部分 递归构造出的最大二叉树。

返回有给定数组 nums 构建的 最大二叉树

img

var getKeyOfMaxElement = func(array []int) int {
var max, res int = array[0], 0
for key, value := range array {
if max < value {
res = key
max = value
}
}
return res
}

// 这道题是分解子问题的
func constructMaximumBinaryTree(nums []int) *TreeNode {
if len(nums) == 0 {
return nil
}
// 找到最大元素的 key
keyOfMaxElement := getKeyOfMaxElement(nums)
// 左边和右边的节点分别构建树
leftTreeRoot := constructMaximumBinaryTree(nums[:keyOfMaxElement])
rightTreeRoot := constructMaximumBinaryTree(nums[keyOfMaxElement+1:])
return &TreeNode{nums[keyOfMaxElement], leftTreeRoot, rightTreeRoot}
}

看注释即可,很简单..