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

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

时间:2022-10-10 16:36:38浏览次数:75  
标签:TreeNode 数组 val nums int 二叉 sortedArrayToBST 有序 null

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

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

示例 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 按 严格递增 顺序排列

作者:力扣 (LeetCode)
链接:https://leetcode.cn/leetbook/read/top-interview-questions-easy/xninbt/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

/**
 * 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.length == 0)
            return null;
        //重写递归函数
        return sortedArrayToBST(nums, 0, nums.length - 1);
    }

    public TreeNode sortedArrayToBST(int[] nums, int start, int end) {
        //此处不能有等号,等号的时候表示还有数据,一定要大于才表示没有数据
        if(start>end){
            return null;
        }
        //中点
        int mid = (start + end) / 2 ;
        //每一次的根节点
        TreeNode root = new TreeNode(nums[mid]);
        //左右节点递归
        root.left = sortedArrayToBST(nums,start,mid-1);
        root.right = sortedArrayToBST(nums,mid+1,end);
        return root;
    }
}

标签:TreeNode,数组,val,nums,int,二叉,sortedArrayToBST,有序,null
From: https://www.cnblogs.com/xiaochaofang/p/16776141.html

相关文章

  • leetcode349.两个数组的交集
    1.题目描述给定两个数组nums1和nums2,返回它们的交集。输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。2.示例示例1:输入:nums1=[1,2,2,......
  • leetcode 236. Lowest Common Ancestor of a Binary Tree 二叉树的最近公共祖先(中等)
    一、题目大意给定一个二叉树,找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树T的两个节点p、q,最近公共祖先表示为一个节点x,满......
  • 代码随想录 day18|513. 找树左下角的值 112. 路径总和 113. 路径总和 II 105. 从前序
    513.找树左下角的值题目|文章1.前序遍历思路题目的要求是先是最底层最左边的节点的值,我们使用前序遍历可以保证是最左边的值,通过深度变化时对节点更新,可以保证是最底......
  • 数组——继计算方法与matlab原理,
    稀疏矩阵以结构体数组存储(C语言也有结构体数组)phase1:三元组:basis,翻转,+I等单操作,按行读取,要遍历整个数组,typedefstructTriple{ //三元组存储非零元信息,数组下......
  • 代码随想录 | 二叉树的遍历
    二叉树的递归遍历递归的三要素1.递归函数的参数和返回值2.递归出口3.单层递归的逻辑144.二叉树的前序遍历给你二叉树的根节点root,返回它节点值的前序遍历。/......
  • LeetCode算法笔记 88. 合并两个有序数组
    importjunit.framework.TestCase;importjava.util.Arrays;publicclassLeetCode02_2extendsTestCase{/***88.合并两个有序数组*给你两个......
  • 查找数组中元素
    输入一个固定长度的数组,并输入一个要查找的数,给出能不能检索到的伪代码并测试integernumbers[6]Write"Enter6integernumbers,oneperline"Setindexto0While(......
  • 11@数组使用详解
    文章目录​​数组​​​​一、数组介绍​​​​1、什么是数组?​​​​2、为何要用数组?​​​​二、数组的使用​​​​1、数组的定义​​​​2、访问数组内元素​​​​......
  • C语言-数组打印图形
    例题:打印等腰三角形答案intmain(intargc,char*argv[]){ intn; scanf("%d",&n); inti,j,k;//  打印行打印星号打印空格。 for(i=1;i<=n;i++) { for(j=1;j<=......
  • 二叉树
    P4715淘汰赛查看代码/*本题一眼就是二叉树,不过是满二叉树,把左右节点做比较,大的就做父节点,类似线段树的打法不过这题也可以用队列+结构体实现,比对时大的继续留在队......