当前位置: 首页 > 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;

    }

}

http://www.dtcms.com/a/194670.html

相关文章:

  • 城市排水管网流量监测系统解决方案
  • 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)等差矩阵)
  • 深入剖析Spring Boot参数校验:实现原理、自定义注解组件与国际化多语言实践
  • allure报告自定义logo和名称
  • 网络安全-等级保护(等保) 2-5-1 GB/T 25070—2019 附录B (资料性附录)第三级系统安全保护环境设计示例
  • 深入解析Shell脚本编程:从基础到实战的全面指南
  • 高效便捷的文字识别方案与解析
  • 将 Element UI 表格元素导出为 Excel 文件(处理了多级表头和固定列导出的问题)
  • rocketmq 环境配置[python]
  • 7-15 计算圆周率
  • 增量学习:机器学习领域中的资源高效利用秘籍
  • 大语言模型 09 - 从0开始训练GPT 0.25B参数量 补充知识之数据集 Pretrain SFT RLHF