0x00 题目

给定一个不重复的整数数组 ​​nums​​​ 构建一个 ​​最大​​ 二叉树
最大二叉树可以用下面的算法从 nums 递归地构建:
创建一个 ​​根节点​​,其值为 ​​nums​​ 中的最大值
递归地在最大值 ​​左边​​ 的子数组前缀上 构建 ​​左子树​​ 递归地在最大值 ​​右边​​ 的子数组后缀上 构建 ​​右子树​​ 返回 ​​nums​​ 构建的 最大二叉树


0x01 思路

找到数组中的 ​​最大数​​​ 构建 ​​根节点​​ 根据索引把数组 ​​一分为二​​ 对两个数组进行 ​​递归​​ 操作


0x02 解法

语言:​​Swift​

树节点:​​TreeNode​

public class TreeNode {
public var val: Int
public var left: TreeNode?
public var right: TreeNode?
public init() { self.val = 0; self.left = nil; self.right = nil; }
public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; }
public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
self.val = val
self.left = left
self.right = right
}
}

解法:

func constructMaximumBinaryTree(_ nums: [Int]) -> TreeNode? {
if nums.isEmpty { return nil }

// 查找数组中最大数的索引
var index: Int = 0
for i in 0..<nums.count {
if nums[index] < nums[i] {
index = i
}
}

// 构建根节点
let root = TreeNode(nums[index])
// 递归构建左子树
root.left = constructMaximumBinaryTree(Array(nums[0..<index]))
// 递归构建右子树
root.right = constructMaximumBinaryTree(Array(nums[(index+1)...]))

return root
}

0x03 我的作品

欢迎体验我的作品之一:​​小五笔 86 版​​​ 五笔学习的好帮手
​App Store​​ 搜索即可~