当前位置: 首页 > news >正文

记录算法笔记(2025.5.15)将有序数组转换为二叉搜索树

给你一个整数数组 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 按 严格递增 顺序排列

思路:

  1. 选择中间元素作为根节点:由于数组是升序排列的,选择数组的中间元素作为根节点,可以保证左右子树的节点数量大致相等,从而保证树的平衡。

  2. 递归构建左右子树:将数组分为两部分,左半部分用于构建左子树,右半部分用于构建右子树。递归地对左右子数组重复上述过程。

  3. 终止条件:当数组的左边界大于右边界时,返回 null,表示当前子树为空。

代码:C#

public class Solution

{

    public TreeNode SortedArrayToBST(int[] nums)

    {

        return Helper(nums, 0, nums.Length - 1);

    }

    private TreeNode Helper(int[] nums, int left, int right)

    {

        if (left > right)

        {

            return null;

        }

        // 选择中间元素作为根节点

        int mid = left + (right - left) / 2;

        TreeNode root = new TreeNode(nums[mid]);

        // 递归构建左子树和右子树

        root.left = Helper(nums, left, mid - 1);

        root.right = Helper(nums, mid + 1, right);

        return root;

    }

}

相关文章:

  • 城市排水管网流量监测系统解决方案
  • CS016-4-unity ecs
  • MySQL高效开发规范
  • 基于SpringBoot的房屋租赁管理系统
  • C语言的9*9乘法表(两种思路,选择适合自己的。)
  • 使用 OpenCV 将图像中标记特定颜色区域
  • 根据台账批量制作个人表
  • idea运行
  • 时源芯微|EMC常用器件原理及选型
  • Mybatis-plus 条件构造器 Wrapper
  • ProfibusDP主站转modbusTCP网关接DP从站网关通讯案例
  • uni-app x正式支持鸿蒙原生应用开发
  • 【HTML5学习笔记1】html标签(上)
  • mac M芯片运行docker-desktop异常问题
  • Protobuf——Protocol Buffer详解(1)
  • 基于 Flink 的实时推荐系统:从协同过滤到多模态语义理解
  • 【Python CGI编程】
  • 网络安全基础第11-13集
  • 香橙派Zero3跨网络音乐服务系统搭建与内网穿透技术应用实践
  • GESP2025年3月认证C++二级( 第三部分编程题(1)等差矩阵)
  • 蒋圣龙突遭伤病出战世预赛存疑,国足生死战后防线严重减员
  • 人民日报整版聚焦:外贸产品拓内销提速增量,多地加快推动内外贸一体化
  • 泽连斯基抵达安卡拉,称乌将派出最高级别代表团参与谈判
  • 《求是》杂志发表习近平总书记重要文章《锲而不舍落实中央八项规定精神,以优良党风引领社风民风》
  • 金砖国家召开经贸联络组司局级特别会议,呼吁共同抵制单边主义和贸易保护主义
  • 白玉兰奖征片综述丨动画的IP生命力