首页 > 其他分享 >力扣热题100 - 二叉树:将有序数组转换为二叉搜索树

力扣热题100 - 二叉树:将有序数组转换为二叉搜索树

时间:2024-09-10 18:49:30浏览次数:10  
标签:right TreeNode nums int 力扣 二叉树 100 root left

题目描述:

题号:108

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

图片


解题思路:

思路一:中序构建二叉树

  1. 选择根节点:

    • 首先,选择数组的中间元素作为根节点。这样做可以确保生成的二叉搜索树尽可能平衡。

  2. 递归构建子树:

    • 将数组分为左半部分和右半部分。左半部分包含所有小于根节点的元素,右半部分包含所有大于根节点的元素。

    • 对左半部分递归执行相同的过程,即选择中间元素作为左子树的根节点,并继续分割数组构建左子树的子树。

    • 对右半部分同样递归执行,选择中间元素作为右子树的根节点,并继续分割数组构建右子树的子树。

  3. 保持平衡:

    • 在递归过程中,始终选择中间元素作为根节点,这样可以确保左右子树的高度差尽可能小,从而保持树的平衡。

时间复杂度:O(N)

空间复杂度:O(logN) 

C++

// C++
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
    TreeNode* builder(vector<int>& nums, int left, int right) {
        if (left > right) {
            return nullptr;
        }

        int mid = (left + right) / 2;

        TreeNode* root = new TreeNode(nums[mid]);
        root->left = builder(nums, left, mid - 1);
        root->right = builder(nums, mid + 1, right);
        return root;
    }
public:
    TreeNode* sortedArrayToBST(vector<int>& nums) {
        return builder(nums, 0, nums.size() - 1);
    }
};

go


// go
/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func sortedArrayToBST(nums []int) *TreeNode {
    return builder(nums, 0, len(nums) - 1)
}

func builder(nums []int, left, right int) *TreeNode {
    if left > right {
        return nil
    }
    mid := (left + right) / 2
    root := &TreeNode{Val: nums[mid]}
    root.Left = builder(nums, left, mid - 1)
    root.Right = builder(nums, mid + 1, right)
    return root
}

标签:right,TreeNode,nums,int,力扣,二叉树,100,root,left
From: https://blog.csdn.net/H_P10/article/details/142029341

相关文章

  • 【代码随想录Day13】二叉树Part01
    理论基础文章讲解:代码随想录二叉树节点的定义:publicclassTreeNode{intval;TreeNodeleft;TreeNoderight;TreeNode(){}TreeNode(intval){this.val=val;}TreeNode(intval,TreeNodeleft,TreeNoderight){this.val......
  • S50VB100-ASEMI单向整流桥S50VB100
    编辑:llS50VB100-ASEMI单向整流桥S50VB100型号:S50VB100品牌:ASEMI封装:SVB-4安装方式:直插批号:2024+现货:50000+正向电流(Id):50A反向耐压(VRRM):1000V正向浪涌电流:450A正向电压(VF):1.10V引脚数量:4芯片个数:4芯片尺寸:102MIL功率(Pd):大功率工作温度:-55°C~150°C类型:整流方桥、......
  • EATON EUC-7-100650008电源高压板
    EATON品牌的EUC-7-100650008控制板是一种用于车辆控制系统的电子设备。这些功能是基于EATON品牌在车辆控制系统中的产品特点:控制执行:控制板通常负责接收来自车辆传感器的信息,并根据这些信息控制车辆的执行器,如油门、制动器和转向系统,以确保车辆按照预定的方式运行。系统管理......
  • 【连续多年EI检索,去年EI检索只需2.5个月!学生易中稿,性价比超高!SPIE出版 (ISSN号: 0277-
    由重庆理工大学、重庆市特种设备检测研究院和重庆市电子学会联合主办,重庆邮电大学、韩国仁荷大学、重庆工程学院、重庆能源职业学院协办,光纤传感与光电检测重庆市重点实验室、现代光电检技术与仪器重庆市高校重点实验室、西部复杂环境机电设备安全国家市场监管重点实验室、智能......
  • 更薄 | 更扛振,邮票孔RK3588J工业核心板,平板电脑首选!国产化率100%
    ......
  • 应急灯升压恒流芯片IC-H6902B 2.7V3.7V5V9V12V24V转48V60V80V100V 10A大电流大功率
    LED驱动方案:IC-H6902B升压恒流芯片!这款芯片以其好性能和不同应用场景,成为LED灯串驱动的不错选择。H6902B内置高精度误差放大器、固定关断时间控制电路和恒流驱动电路,确保高亮度LED灯串的稳定驱动。通过RFB采样电阻设置,轻松控制LED灯的驱动电流,实现恒定亮度。更棒的是,它还支持PWM信......
  • 【Python】排序算法及二叉树讲解(冒泡 选择 插入 二分查找 二叉树的广度优先和三种深
    排序算法​所谓排序,使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作​排序算法,就是如何使得记录按照要求排列的方法​排序算法在很多领域是非常重要​在大量数据的处理方面:一个优秀的算法可以节省大量的资源。​在各个领域中考虑到数据的......
  • 【算法题】13.罗马数字转整-力扣(LeetCode)
    【算法题】13.罗马数字转整-力扣(LeetCode)1.题目下方是力扣官方题目的地址13.罗马数字转整数罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符数值I1V5X10L50C100D5......
  • 代码随想录算法 - 二叉树
    题目1226.翻转二叉树给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。示例1:输入:root=[4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]示例2:输入:root=[2,1,3]输出:[2,3,1]示例3:输入:root=[]输出:[]提示:树中节点数目范围在[0,100]内-100<=Node.val......
  • KubeCon China 回顾|快手的 100% 资源利用率提升:从裸机迁移大规模 Redis 到 Kubernetes
    大家下午好,我是来自ApeCloud的吴学强,非常高兴能够在KubeCon做分享。今天的分享由我和来自快手的刘裕惺同学共同完成,我们分享的主题是将大规模的Redis实例从裸机迁移到Kubernetes上来提高资源的利用率。我们今天的议题包括几个方面,首先我会来简单介绍一下KubeBlock......