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

相关文章:

  • 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补充
  • 9e做网站/新品牌进入市场的推广方案
  • 网站建设388/常见的网络推广方法有哪些
  • 网站开发 名片/杭州优化排名哪家好
  • 专注徐州网站建设/廊坊seo优化
  • 做网站需要写配置文件吗/百度搜索推广流程
  • 网站文字配色/win10优化软件