首页 > 其他分享 >将有序数组转换为二叉搜索树

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

时间:2024-10-22 09:17:51浏览次数:3  
标签:TreeNode 数组 nums int length 二叉 numsRight numsLeft 有序

给你一个整数数组 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 按 严格递增 顺序排列
/**
 * 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) {
        if (nums == null && nums.length == 0) {
            return null;
        }

        int middle = nums.length / 2;
        int[] numsLeft = Arrays.copyOf(nums, middle);
        int[] numsRight = Arrays.copyOfRange(nums, middle + 1, nums.length);
        TreeNode treeNode = new TreeNode(nums[middle]);
        sortedArrayToBST(numsLeft, numsRight, treeNode);
        return treeNode;
    }

    public void sortedArrayToBST(int[] numsLeft, int[] numsRight, TreeNode treeNode) {
        if (numsLeft != null && numsLeft.length > 0) {
            int middleLeft = numsLeft.length / 2;
            int[] numsLeftTemp = Arrays.copyOf(numsLeft, middleLeft);
            int[] numsRightTemp = Arrays.copyOfRange(numsLeft, middleLeft + 1, numsLeft.length);
            treeNode.left = new TreeNode(numsLeft[middleLeft]);
            sortedArrayToBST(numsLeftTemp, numsRightTemp, treeNode.left);
        }
        if (numsRight != null && numsRight.length > 0) {
            int middleRight = numsRight.length / 2;
            int[] numsLeftTemp = Arrays.copyOf(numsRight, middleRight);
            int[] numsRightTemp = Arrays.copyOfRange(numsRight, middleRight + 1, numsRight.length);
            treeNode.right = new TreeNode(numsRight[middleRight]);
            sortedArrayToBST(numsLeftTemp, numsRightTemp, treeNode.right);
        }
    }
}

标签:TreeNode,数组,nums,int,length,二叉,numsRight,numsLeft,有序
From: https://blog.csdn.net/linsa_pursuer/article/details/143139506

相关文章

  • Day21数组的声明和创建
    Day21数组的声明和创建数组声明创建:首先必须声明数组变量才能在程序中使用数组。声明数组变量的语法有两种:“dataType[]arrayRefVar;”(首选方法);或“dataTypearrayRefVar[];”(效果相同,但不是首选方法)。Java语言使用new操作符来创建数组,语法为dataType[]arra......
  • dfs题目:平衡二叉树(java)
    平衡二叉树题目思路开始的error代码(最后一行return的地方有误)修正的代码题目链接:平衡二叉树题目题目思路用分治的思想,要想看看以root为根节点的二叉树是不是平衡二叉树,得看他的左子树和右子树是不是平衡二叉树,如果左子树和右子树都是平衡的,且root自己是平衡的......
  • 数组的概念(C++)
        今天介绍一下数组。在C++中,数组就是一种用于存储相同类型元素的容器,也是一种数据结构,在编程中被广泛使用。一、定义与组成    数组是由相同类型的元素组成的集合,这些元素在内存中是连续存储的。例如,一个整数数组可以存储多个整数,一个字符数组可以存储......
  • 【java】实现字节数组转int(采用IEEE 754标准)
    /***字节数组转int*采用IEEE754标准**@parambytes*@returnfloat*/publicintbytesToInt(byte[]bytes){//获取字节数组转化成的2进制字符串StringbinaryStr=bytesToBinaryStr(bytes);//......
  • 代码随想录算法训练营第六天| leetcode242.有效的字母异位词、leetcode349.两个数组的
    1.leetcode242.有效的字母异位词题目链接:242.有效的字母异位词-力扣(LeetCode)文章链接:代码随想录视频链接:学透哈希表,数组使用有技巧!Leetcode:242.有效的字母异位词_哔哩哔哩_bilibili自己的思路:首先就是对字符串进行分开成一个一个单独的字母,然后使用列表存储这些数据,再对......
  • 数组的往返(数组来回遍历)C语言版
    文章目录前言题目描述一、数组的往返是什么?二、实现1.具体代码2.完整题解代码总结以及一些疑问前言本篇文章灵感来源于第十三届蓝桥杯省赛C++B组第六题修剪灌木,我的方法是老老实实地走完这个流程得到答案题目描述爱丽丝要完成一项修剪灌木的工作。有N棵灌......
  • 包装类型-数组Array方法
    数组Array使用详解认识数组(Array)◼什么是数组(Array)呢?对象允许存储键值集合,但是在某些情况下使用键值对来访问并不方便;比如说一系列的商品、用户、英雄,包括HTML元素,我们如何将它们存储在一起呢?这个时候我们需要一种有序的集合,里面的元素是按......
  • JS中数组的splice()方法介绍 及 用原生JS手写数组splice()方法
    一、splice是什么splice()方法是用来对数组进行增、删操作,该方法返回被删除的元素,改变原数组二、splice()方法接受三个及以上的参数:第一个参数:第一个参数是起始位置(数组的索引)第二个参数:第二个参数是要删除的元素个数,如果该参数是负数则默认为0第三个参数及往后参数:这些......
  • 2024-10-19:用go语言,给定一个正整数 k 和初始数组 nums = [1], 可以执行两种操作:将数组
    2024-10-19:用go语言,给定一个正整数k和初始数组nums=[1],可以执行两种操作:将数组中任一元素加一,或复制数组中任意元素并将其附加到数组末尾。求使得数组元素之和大于或等于k所需的最少操作次数。输入:k=11。输出:5。解释:可以对数组nums=[1]执行以下操作:将元......
  • 二叉搜索树的结构
    #include<iostream>#include<string>usingnamespacestd;typedefstructTreeNode*Tree;structTreeNode{ intv; TreeLeft,Right; intlevel;};TreeNewNode(intV){ TreeT=(Tree)malloc(sizeof(structTreeNode)); T->v=V; T->Le......