LeetCode-热题100: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 按 严格递增 顺序排列

代码及注释

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */

func sortedArrayToBST(nums []int) *TreeNode {
    // 调用 build 函数构建 BST,并返回根节点
    return build(nums, 0, len(nums) - 1)
}

func build(nums []int, l, r int) *TreeNode {
    // 如果左指针大于右指针,说明已经没有元素可以添加,返回 nil
    if l > r {
        return nil
    }
    // 计算中间位置
    mid := (l + r) / 2
    // 创建根节点,并赋值为数组中间的元素
    root := &TreeNode{Val: nums[mid]}
    // 递归构建左子树
    root.Left = build(nums, l, mid - 1)
    // 递归构建右子树
    root.Right = build(nums, mid + 1, r)
    // 返回当前根节点
    return root
}

代码解释

  1. 主函数 sortedArrayToBST:主函数接收一个有序数组 nums,并调用 build 函数以构建平衡二叉搜索树(BST)。lr 分别表示当前子数组的左右边界。

  2. 辅助函数 build

    • 基准情况:如果 l > r,则当前子数组为空,返回 nil
    • 计算中间位置:取当前子数组的中间位置 mid
    • 创建根节点:创建一个新的树节点 root,其值为 nums[mid]
    • 递归构建左子树和右子树:使用递归分别构建左子树(lmid-1)和右子树(mid+1r)。
    • 返回根节点:返回当前构建的根节点 root
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值