首页 > 其他分享 >刷刷刷 Day 23 | 108. 将有序数组转换为二叉搜索树

刷刷刷 Day 23 | 108. 将有序数组转换为二叉搜索树

时间:2023-01-26 22:33:25浏览次数:62  
标签:10 nums 23 构造 Day 108 二叉 root 节点

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

LeetCode题目要求

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

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

图

示例

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

要构造一个二叉树,首先要找到 root 节点,题目要求构造的是个高度平衡的二叉树,那么从有序数组中找到 mid 索引,就可以构造出二叉搜索树,且在保证二叉搜索树特性的情况下,完成节点的构造。
假设根据 nums = [-10,-3,0,5,9],5 个节点来构造,进行二分,找到 root 节点 0,同时切分为 [-10, -3] 和 [5, 9] 两个子数组,接着来构造 root 的左右子节点,先看 [-10, -3] 这个子数组是左子树,且构造要符合二叉搜索树,这是需继续二分,直到剩余一个节点,才构造;[5, 9] 作为右子树做同样的操作

上代码

class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {

        // 左闭右开
        return traversal(nums, 0, nums.length);

        /**
      索引 0   1   2  3  4
         -10, -3, 0, 5, 9
         递归,根据 nums 的 mid 索引找 root 节点,通过 nums 不断进行二分,完成左右节点构造,构造顺序为 中 左 右
                0
               / \
              -3  9
             /   /
           -10  5
        */
        
    }

    public TreeNode traversal(int[] nums, int start, int end) {
        // 递归终止条件
        if (end - start < 1) {
            return null;
        }

        // 节点数等于 1 个时, 开始构造节点, 左闭右开
        if (end - start == 1) {
            return new TreeNode(nums[start]);
        }

        int mid = (start + end) / 2;
        // 确定 root 节点 构造 root 节点
        TreeNode root = new TreeNode(nums[mid]);

        root.left = traversal(nums, start, mid);
        root.right = traversal(nums, mid + 1, end);

        return root;
    }
}
重难点

找 root 节点,始终保持一个 左闭右开,或者左闭右闭的原则 对数组不断切分。直到剩下一个元素才构造节点。

附:学习资料链接

标签:10,nums,23,构造,Day,108,二叉,root,节点
From: https://www.cnblogs.com/blacksonny/p/17068345.html

相关文章

  • C++Day12 虚拟继承内存布局测试
    测试一、虚继承与继承的区别1.1单个继承,不带虚函数1>classBsize(8):1>+---1>0|+---(baseclassA)1>0||_ia//4B1......
  • S2 - Lesson 23 - A new house
    Wordscomplete  strangeweheardastrangesoundstranger modern districtCBD=CentralBusinessDistrict     Content AnewhouseIhad......
  • 123
    三`丰`云免费云服务器三·丰·云提供1h1g的免费云服务器,个人食用过,非常好用都是国内节点,很快,也稳定免费领取地址:三丰云免费云服务器......
  • day10-AOP-03
    AOP-037.AOP-切入表达式7.1切入表达式的具体使用1.切入表达式的作用:通过表达式的方式定义一个或多个具体的连接点。2.语法细节:(1)切入表达式的语法格式:execution([权......
  • 刷刷刷 Day 23 | 669. 修剪二叉搜索树
    669.修剪二叉搜索树LeetCode题目要求给你二叉搜索树的根节点root,同时给定最小边界low和最大边界high。通过修剪二叉搜索树,使得所有节点的值在[low,high]中。修剪树......
  • 电工笔记 day1
          blog:师万物 本文是学习内容的简单回顾,希望对大家能有所帮助。 10A插座、16A插座380V/220V低压供配电电路的维修LC串联、并联电路PLC、变频器R......
  • 电工笔记 day2
          blog:师万物 本文是学习内容的简单回顾,希望对大家能有所帮助。 NPN型、PNP型三极管PN结倍率扁平封装变压器波形测试线、探头、接地夹插针网......
  • 算法--2023.1.26
    1.力扣338--比特位计数classSolution{publicint[]countBits(intn){//关键在于找到递推公式int[]res=newint[n+1];for(inti......
  • [20230125]21c Force matching signature的计算.txt
    [20230125]21cForcematchingsignature的计算.txt--//昨天看了链接:https://hourim.wordpress.com/2023/01/22/force-matching-signature/--//里面提到计算force_matchin......
  • 【AAAI2023】Head-Free Lightweight Semantic Segmentation with Linear Transformer
    论文:【AAAI2023】Head-FreeLightweightSemanticSegmentationwithLinearTransformer代码:https://github.com/dongbo811/AFFormer这是来自阿里巴巴的工作,作者构建了......