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

将有序数组转换为二叉搜索树 力扣108

一、题目

给你一个整数数组 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] 都是高度平衡二叉搜索树。

二、思路

        首先要知道二叉搜索树又叫二叉排序树,具有左小于根小于右的性质。本题中nums已升序排序。选择中间节点作为根节点,然后递归构建左子树和右子树就可以了。

三、代码

/**
 * 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 low,int high){
        //递归终止条件
        if(low > high) {
            return null;
        }
        int mid = low + (high - low ) /2; //每次选择中间节点作为根节点
        TreeNode root = new TreeNode(nums[mid]);
        //递归构建左子树和右子树
        root.left = dfs(nums,low,mid - 1);
        root.right = dfs(nums,mid+1,high);
        return root;
    }
}


http://www.kler.cn/a/594354.html

相关文章:

  • 什么是 React Router?如何使用它?
  • Web-Machine-N7靶机通关攻略
  • 技术速递|.NET AI 模板现已提供预览版
  • 用Ollama部署大语言模型
  • Spring MVC 拦截器使用
  • Linux系统上后门程序的原理细节,请仔细解释一下
  • Excel处理控件Spire.XLS系列教程:C# 在 Excel 中添加或删除单元格边框
  • 编码器线:精准连接,高效传动,引领未来科技的脉动
  • “三带一”算法题
  • Python八字排盘系统实现分析
  • 【vulhub/wordpress靶场】------获取webshell
  • 音视频之H.265码流分析及解析
  • SpringBoot第四站(1):数据层开发: 配置数据源,整合jdbcTemplate
  • Node.js技术原理分析系列6——基于 V8 封装一个自己的 JavaScript 运行时
  • STM32 模拟SPI 模式0
  • 【数据结构】单源最短路径dijkstra算法描述及模板
  • 【Linux】信号:产生信号
  • Unity 接入抖音小游戏
  • 低代码与在线教育系统源码:企业内训平台开发的新思路
  • 智慧社区、智慧消防物联网解决方案PPT(68页)