首页 > 其他分享 >LeetCode 108.将有序数组转换成二叉搜索树

LeetCode 108.将有序数组转换成二叉搜索树

时间:2023-04-14 13:32:28浏览次数:60  
标签:right TreeNode val nums int 二叉 108 LeetCode left

1.题目:

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

高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。


示例 1:

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

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


2.代码:

/**
 * 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 change(nums,0,nums.length-1);//注意这里的尾巴是数组的长度减一
    }
    public TreeNode change(int[] nums,int left,int right){
        if(left>right) return null;//递归的出口
        int mid = (right+left)/2;//找到数组的中间值,就是二叉树的头结点
        TreeNode root = new TreeNode(nums[mid]);//先构造头结点
        root.left = change(nums,left,mid-1);//然后递归传进二叉树的左子树//注意范围,这里用的是左闭右闭
        root.right = change(nums,mid+1,right);//递归传进二叉树的右子树
        return root;
    }
}






标签:right,TreeNode,val,nums,int,二叉,108,LeetCode,left
From: https://blog.51cto.com/u_15806469/6189942

相关文章

  • [LeetCode] 1440. Jump Game V 跳跃游戏之五
    Givenanarrayof integers arr andaninteger d.Inonestepyoucanjumpfromindex i toindex:i+x where: i+x<arr.length and 0< x<=d.i-x where: i-x>=0 and 0< x<=d.Inaddition,youcanonlyjumpfromindex i toi......
  • 【前缀和】LeetCode 1031. 两个非重叠子数组的最大和
    题目链接1031.两个非重叠子数组的最大和思路代码classSolution{publicintmaxSumTwoNoOverlap(int[]nums,intfirstLen,intsecondLen){//求一个前缀和for(inti=1;i<nums.length;++i){nums[i]+=nums[i-1];}......
  • 【DP】【分治】LeetCode 53. 最大子数组和
    题目链接[https://leetcode.cn/problems/maximum-subarray/description/](53.最大子数组和"https://leetcode.cn/problems/maximum-subarray/description/")思路分析动态规划题目的时候只需要考虑最后一个阶段,因为所有的阶段转化都是相同的,考虑最后一个阶段容易发现规律在数......
  • 剑指 Offer 09. 用两个栈实现队列 && leetcode225.用队列实现栈
     剑指Offer09.用两个栈实现队列 classCQueue{private:stack<int>inStack,outStack;voidin2out(){//这里必须是while循环,如果是if判断,则输出栈日常只有一个值,没有起到先入后出的作用while(!inStack.empty()){//将输入栈栈顶......
  • leetcode:路径总和 III
    问题描述给定一个二叉树的根节点root ,和一个整数targetSum,求该二叉树里节点值之和等于targetSum的路径的数目。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。示例1输入:root=[10,5,-3,3,2,null,11,3,-2,null,1],ta......
  • uva 11082 A Plug for UNIX
     #include<iostream>#include<vector>#include<map>#include<queue>#include<cstring>usingnamespacestd;constintN=1e4+2,M=5e5;intn1,n2,n3,len;map<string,int>mp;map<int,int>A,B;constintin......
  • 二叉树的先序遍历
    二叉树的先序遍历遍历二叉树遍历方法遍历方法有先序遍历,中序遍历,和后序遍历先序遍历:按照根,左子树,右子树的顺序遍历中序遍历:按照先左子树,根和右子树的顺序遍历后序遍历:按照先左子树,右子树和根的顺序遍历使用递归进行遍历二叉树的先序遍历算法示意图算法实现......
  • #yyds干货盘点# LeetCode程序员面试金典:两两交换链表中的节点
    题目:给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例1:输入:head=[1,2,3,4]输出:[2,1,4,3]示例2:输入:head=[]输出:[]示例3:输入:head=[1]输出:[1]代码实现:classSolution{publicListN......
  • #yyds干货盘点# LeetCode面试题:颜色分类
    1.简述:给定一个包含红色、白色和蓝色、共 n个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。我们使用整数0、 1和2分别表示红色、白色和蓝色。必须在不使用库内置的sort函数的情况下解决这个问题。 示例1:输入:nums=[2,0......
  • 96. 不同的二叉搜索树
    classSolution{public:intf[25];//f[i]表示i个数可以构成的树的个数intnumTrees(intn){f[0]=1;for(inti=1;i<=n;i++){for(intj=1;j<=i;j++)//以j为根节点f[i]+=f[j-1]*f[i-j];}re......