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

力扣 Hot 100 刷题记录 - 将有序数组转换为二叉搜索树

力扣 Hot 100 刷题记录 - 将有序数组转换为二叉搜索树

题目描述

将有序数组转换为二叉搜索树 是力扣 Hot 100 中的一道经典题目,题目要求如下:

给你一个整数数组 nums,其中元素已经按 升序排列,请你将其转换为一棵 高度平衡 的二叉搜索树(BST)。

示例 1:
输入:nums = [-10,-3,0,5,9]
输出:[0,-3,9,-10,null,5]

示例 2:
输入:nums = [1,3]
输出:[3,1]


解题思路

这道题的核心是将 有序数组 转换为 高度平衡的二叉搜索树。二叉搜索树(BST)的性质是:

  • 左子树的所有节点值小于根节点值。
  • 右子树的所有节点值大于根节点值。
  • 左右子树也是二叉搜索树。

为了构建高度平衡的 BST,我们可以采用 分治法

  1. 每次选择数组的中间元素作为根节点。
  2. 递归构建左子树和右子树。

C++ 代码实现

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    TreeNode* sortedArrayToBST(vector<int>& nums) {
        return buildBST(nums, 0, nums.size() - 1);
    }

private:
    TreeNode* buildBST(vector<int>& nums, int left, int right) {
        if (left > right) return nullptr; // 递归终止条件

        int mid = left + (right - left) / 2; // 选择中间元素作为根节点
        TreeNode* root = new TreeNode(nums[mid]); // 创建根节点

        // 递归构建左子树和右子树
        root->left = buildBST(nums, left, mid - 1);
        root->right = buildBST(nums, mid + 1, right);

        return root;
    }
};
http://www.dtcms.com/a/79181.html

相关文章:

  • C#命令行参数用法
  • Python程序常用的配置文件格式及例子(上)
  • Linux搭建conda虚拟环境流程
  • C++ vcpkg下载rttr等类库
  • 【3D模型】【游戏开发】【Blender】Blender模型分享-狮头木雕附导入方法
  • Redis 安装详细教程(小白版)
  • 网络流基本概念及实现算法
  • uni-app——网络API
  • Java 中 Vector 的底层数据结构及相关分析
  • 创建Vue3工程
  • 【Axure高保真原型】增删改饼图
  • springmvc中如何自定义入参注解并自动注入值
  • 为什么要用linux?
  • C#—【特性详解以及自定义特性和通过反射读取特性】
  • 架构师面试(十八):I/O 原理
  • 前端开发:这就是终点吗?
  • CXL协议之FM(Fabric Management)解释
  • HTML 列表
  • 3.17 配置hadoop集群-理论准备
  • MySql补充
  • 20250319在荣品的PRO-RK3566开发板的buildroot系统下使用集成的QT应用调试串口UART3
  • 大模型学习-从零开始在colab训练大模型
  • ffmpeg库视频硬解码使用流程
  • R语言基础小测验
  • 什么是 HTML 实体,常见的 HTML 实体有哪些用途?
  • Qt带参数的信号和槽,以及信号与槽的连接方式
  • AI 时代,学习 Java 应如何入手?
  • Ubuntu-server-16.04 设置多个ip和多个ipv6
  • 传统服务部署、虚拟化部署与云原生部署资源消耗对比与优化指南
  • nvm 安装某个node.js版本后不能使用或者报错,或不能使用npm的问题