leetcode-108 将有序数组转换为二叉搜索树
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵平衡二叉搜索树。
示例 1:
输入:nums = [-10,-3,0,5,9]
输出:[0,-3,9,-10,null,5]
解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:
示例 2:
输入:nums = [1,3]
输出:[3,1]
解释:[1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。
提示:
- 1 <= nums.length <= 104
- -104 <= nums[i] <= 104
- nums 按 严格递增 顺序排列
go实现:
// 定义二叉树节点结构
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
// 主函数,用于将有序数组转为高度平衡二叉树
func sortedArrayToBST(nums []int) *TreeNode {
// 直接返回辅助函数结果
return buildBST(nums, 0, len(nums)-1)
}
// 辅助函数,用于构建二叉树,参数为给定数组nums,及构建范围左右边界
func buildBST(nums []int, left, right int) *TreeNode {
// 当左边界大于右边界时,表示搜索区域内无可构建元素,于是返回空对象
if left > right {
return nil
}
// 获取数组中位数作为根节点,因为数组为升序排序,故其中位数符合二叉树节点值要求,即左边区域均小于节点,右边区域均大于节点
mid := left + (right-left)/2
// 创建根节点root,其中节点值为给定数组范围中位数,这里是变量地址拷贝
root := &TreeNode{Val: nums[mid]}
// 通过调用函数自身的方式递归创建左节点树(中间值左边部分)
root.Left = buildBST(nums, left, mid-1)
// 创建右节点树(中间值右边部分)
root.Right = buildBST(nums, mid+1, right)
// 返回创建结果
return root
}
本文作者:505donkey
本文链接:https://www.cnblogs.com/505donkey/p/18625328
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步