leetcode——将有序数组转化为二叉搜索树(java)

news/2025/2/1 8:32:51 标签: leetcode, java, 算法, 数据结构

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

示例 1:

img

输入:nums = [-10,-3,0,5,9]
输出:[0,-3,9,-10,null,5]
解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:

示例 2:

img

输入:nums = [1,3]
输出:[3,1]
解释:[1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。

二叉搜索数的概念:

  • 左子树的所有键值均小于其根节点的键值。

  • 右子树的所有键值均大于其根节点的键值。

解题方法:(递归)

1.由题得这个数组是升序排列,所以我们首先需要找到其中间值,通过lo + (hi - lo) / 2来不断更新中间值(即当前根节点的值)。

2.然后分别进入左右子树的递归。

  • 左子树的递归将hi的指针往左移动。

  • 右子树的递归将lo的指针往右移动。

java">/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {
        return dfs(nums, 0, nums.length - 1);
    }
    private TreeNode dfs(int[] nums, int lo, int hi) {
        if (lo > hi) {
            return null;
        }
        int mid = lo + (hi - lo) / 2;
        TreeNode root = new TreeNode(nums[mid]);
        root.left = dfs(nums, lo, mid - 1);
        root.right = dfs(nums, mid + 1, hi);
        return root;
    }
}


http://www.niftyadmin.cn/n/5839203.html

相关文章

基于遗传优化GRNN和Hog特征提取的交通标志识别算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 HOG 4.2 GRNN(General Regression Neural Network)模型原理 4.3 遗传算法(GA)优化GRNN平滑因子 5.算法完整程序工程 1.算法运行效果图预…

3-Redis哨兵高可用集群搭建

本文介绍redis哨兵集群的搭建。redis sentinel是redis高可用主从集群的解决方案。通过sentinel在主从集群上,当master下线后,sentinel自动选择一个slave,将slave变成master,从而达到故障转移的目的,实现主从集群的高可…

【llm对话系统】大模型 Llama 源码分析之并行训练方案

1. 引言 训练大型语言模型 (LLM) 需要巨大的计算资源和内存。为了高效地训练这些模型,我们需要采用各种并行策略,将计算和数据分布到多个 GPU 或设备上。Llama 作为当前最流行的开源大模型之一,其训练代码中采用了多种并行技术。本文将深入 …

FreeRTOS从入门到精通 第十六章(任务通知)

参考教程:【正点原子】手把手教你学FreeRTOS实时系统_哔哩哔哩_bilibili 一、任务通知简介 1、概述 (1)任务通知顾名思义是用来通知任务的,任务控制块中的结构体成员变量ulNotifiedValue就是这个通知值。 (2&#…

Axure入门教程 -- 第五章:原型优化与调试

第五章:原型优化与调试 1. 原型预览与导出 预览功能的使用 操作步骤: 点击右上角的“预览”按钮,打开浏览器查看当前页面原型。使用浏览器开发者工具检查页面的响应效果。 互动练习: 创建一个简单的页面(如登录页面&a…

论文阅读(十):用可分解图模型模拟连锁不平衡

1.论文链接:Modeling Linkage Disequilibrium with Decomposable Graphical Models 摘要: 本章介绍了使用可分解的图形模型(DGMs)表示遗传数据,或连锁不平衡(LD),各种下游应用程序之…

16进制(十六进制)和二进制之间的转换

1. 二进制与十六进制的基本关系 二进制:每个二进制位(bit)表示一个数字,取值只能是 0 或 1。十六进制:每个十六进制数字可以表示 4 位二进制数。 所以,1 个十六进制数字可以表示4 位二进制数(…

【leetcode强化练习·二叉树】同时运用两种思维解题

本文参考labuladong算法笔记[【强化练习】同时运用两种思维解题 | labuladong 的算法笔记] 有的题目可以同时用「遍历」和「分解问题」两种思路来解,你可以利用这些题目训练自己的思维。 559. N 叉树的最大深度 | 力扣 | LeetCode | 给定一个 N 叉树,…