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

news2024/11/15 18:41:45

题目来源:https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree/description/

 

 

 C++题解1:递归法。由于要求是平衡树,又给出了递增数组,所以构建二叉树只需将中间值作为中间节点,左右两边分属左右子树,这样就可以不断地保证左右子树的高度平衡。重点在于区分左右区间,我采用的是左闭右闭区间,中间节点如果有两个选择左边的一个。

class Solution {
public:
    TreeNode* sorttree(vector<int>& nums, int leftind, int rightind) {
        int mid = floor((leftind + rightind) / 2);
        TreeNode* node = new TreeNode(nums[mid]);
        if(leftind == rightind) return node;
        else if(leftind > rightind) return nullptr;
        else{
            node->left = sorttree(nums, leftind, mid-1);
            node->right = sorttree(nums, mid+1, rightind);
        }
        return node;
    }
    TreeNode* sortedArrayToBST(vector<int>& nums) {
        int len = nums.size();
        if(len == 1) return new TreeNode(nums[0]);
        TreeNode* root = sorttree(nums, 0, len-1);
        return root;
    }
};

C++题解2:迭代法,类似层序遍历,但是用数组的值替代每一节点的值,且需要存放左右区间的索引。来源代码随想录

class Solution {
public:
    TreeNode* sortedArrayToBST(vector<int>& nums) {
        if (nums.size() == 0) return nullptr;

        TreeNode* root = new TreeNode(0);   // 初始根节点
        queue<TreeNode*> nodeQue;           // 放遍历的节点
        queue<int> leftQue;                 // 保存左区间下标
        queue<int> rightQue;                // 保存右区间下标
        nodeQue.push(root);                 // 根节点入队列
        leftQue.push(0);                    // 0为左区间下标初始位置
        rightQue.push(nums.size() - 1);     // nums.size() - 1为右区间下标初始位置

        while (!nodeQue.empty()) {
            TreeNode* curNode = nodeQue.front();
            nodeQue.pop();
            int left = leftQue.front(); leftQue.pop();
            int right = rightQue.front(); rightQue.pop();
            int mid = left + ((right - left) / 2);

            curNode->val = nums[mid];       // 将mid对应的元素给中间节点

            if (left <= mid - 1) {          // 处理左区间
                curNode->left = new TreeNode(0);
                nodeQue.push(curNode->left);
                leftQue.push(left);
                rightQue.push(mid - 1);
            }

            if (right >= mid + 1) {         // 处理右区间
                curNode->right = new TreeNode(0);
                nodeQue.push(curNode->right);
                leftQue.push(mid + 1);
                rightQue.push(right);
            }
        }
        return root;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/709955.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无广告 齐全 简洁 免费的音乐开源软件(支持 电脑max win linux 手机 )——lxMusic

无广告 齐全 简洁 免费的音乐开源软件&#xff08;支持 电脑max win linux 手机 &#xff09;——lxMusic 话不多说先上效果 &#xff08;真香&#xff09; 下载地址&#xff08;官方&#xff09; https://www.lanzoui.com/b0bf2cfa/ 密码&#xff1a;glqw 软件安装包说明 文…

python接口自动化(五)--接口测试用例和接口测试报告模板(详解)

简介 当今社会在测试领域&#xff0c;接口测试已经越来越多的被提及&#xff0c;被重视&#xff0c;而且现在好多招聘信息要对接口测试提出要求。区别于传统意义上的系统级别测试&#xff0c;很多测试人员在接触到接口测试的时候&#xff0c;也许对测试执行还可以比较顺利的上手…

FDM3D打印系列——5、上色和灯光

3D打印扎古头可动并加灯 大家好&#xff0c;我是阿赵&#xff0c;这次通过一个实际操作的例子&#xff0c;来聊一下3D打印模型添加效果。这里主要讲2个方面&#xff0c;一个是上色&#xff0c;另一个是加灯光 一、上色 这个扎古头模型就是这次的主角。 1、打磨 可以看到&…

MIT 6.S081 教材第七章内容 -- 调度 -- 上

MIT 6.S081 教材第七章内容 -- 调度 -- 上 引言线程&#xff08;Thread&#xff09;概述XV6线程调度XV6线程切换实际切换流程 XV6进程切换示例程序yield/sched函数switch函数scheduler函数 补充 引言 MIT 6.S081 2020 操作系统 本文为MIT 6.S081课程第七章教材内容翻译加整理…

基于Python所写的飞鸟游戏设计

https://blog.csdn.net/qq_64505944/article/details/131493838?spm1001.2014.3001.5502

容器环境检测方法总结

在渗透测试过程中&#xff0c;我们的起始攻击点可能在一台虚拟机里或是一个Docker环境里&#xff0c;甚至可能是在K8s集群环境的一个pod里&#xff0c;我们应该如何快速判断当前是否在容器环境中运行呢&#xff1f; 当拿到shell权限&#xff0c;看到数字和字母随机生成的主机名…

(四)Qt 动态手势识别“手掌随动”+“握拳选择”

系列文章目录 通过Qt实现手势识别控制软件操作相关系列技术方案 &#xff08;一&#xff09;Qt 将某控件、图案绘制在最前面的方法&#xff0c;通过QGraphicsScene模块实现 &#xff08;二&#xff09;Qt QGraphicsScene模块实现圆点绘制在所有窗体的最前方&#xff0c;实现圆…

【java爬虫】使用selenium爬取优惠券

本文将介绍使用selenium爬取某宝优惠券的方法&#xff0c;之所以使用selenium是因为我不会js逆向&#xff0c;如果你已经参透了淘宝联盟的js逆向方法&#xff0c;那么直接使用接口调数据就行了。 使用selenium接管chrome浏览器 由于淘宝联盟需要先登录&#xff0c;为了避免每…

【剧前爆米花--爪哇岛寻宝】TCP实现可靠性的方法以及连接相关的三次握手四次挥手

作者&#xff1a;困了电视剧 专栏&#xff1a;《JavaEE初阶》 文章分布&#xff1a;这是一篇关于网络编程的文章&#xff0c;在这篇文章中我会具体介绍TCP是如何实现可靠性的并且分析建立断开连接的情况&#xff0c;希望对你有所帮助&#xff01; 目录 可靠性 确认应答 超时…

iOS开发进阶(一):走近iOS原生开发

文章目录 一、前言二、知识储备三、 Object-C四、启动流程五、拓展阅读 一、前言 在应用 uni-app 进行跨平台APP开发过程中&#xff0c;发现并不支持视频播放小窗功能&#xff0c;且插件市场提供的插件用户体验不好&#xff0c;遂决定自行开发 uni-app 原生插件。 uni-app原生…

力扣 450. 删除二叉搜索树中的节点

题目来源&#xff1a;https://leetcode.cn/problems/delete-node-in-a-bst/description/ C题解1&#xff1a;迭代法。删除节点需要分情况讨论&#xff1a; 找不到节点&#xff0c;返回原根节点&#xff1b;删除节点无子节点&#xff0c;那么其父节点指向空就行&#xff08;注意…

Java前端编译与优化

一个编译器的前端把*.java文件转变成*.class文件的过程称为Java前端编译。像Javac这类前端编译器对代码的运行效率几乎没任何优化措施&#xff0c;但是其做了许多针对Java语言编码过程的优化措施来降低程序员的编码复杂度、提供编码效率。 1 Javac编译器 准备过程 初始化插入…

《PyTorch深度学习实践》第十讲 卷积神经网络(基础篇)

b站刘二大人《PyTorch深度学习实践》课程第十讲卷积神经网络&#xff08;基础篇&#xff09;笔记与代码&#xff1a;https://www.bilibili.com/video/BV1Y7411d7Ys?p10&vd_sourceb17f113d28933824d753a0915d5e3a90 上一讲中MNIST数据集的例子采用的是全连接神经网络&#…

自然语言处理从入门到应用——预训练模型总览:两大任务类型

分类目录&#xff1a;《自然语言处理从入门到应用》总目录 从大量无标注数据中进行预训练使许多自然语言处理任务获得显著的性能提升。总的来看&#xff0c;预训练模型的优势包括&#xff1a; 在庞大的无标注数据上进行预训练可以获取更通用的语言表示&#xff0c;并有利于下游…

python语法(高阶)-多线程编程

""" 演示多线程编程的使用 """ import time import threadingdef sing(msg):while True:print(msg)time.sleep(1)return Nonedef dance(msg):while True:print(msg)time.sleep(1)return Noneif __name__ __main__:# 创建一个唱歌的线程&#xf…

后台管理系统的权限(vue如何实现后台管理系统的权限,react如何实现后台管理系统的权限)

一、权限的解释 一般来说&#xff0c;在后台管理系统里肯定会使用到权限&#xff0c;权限一般分为功能级权限和数据级权限 1、功能级权限 1&#xff09;、页面级权限&#xff08;菜单&#xff09;&#xff1a; 不同的用户&#xff08;角色&#xff09;登录到管理系统后&#…

mysql load data infile 报错 1290 处理方法

mysql load data infile 命令导入数据报错"16:06:13 load data infile “/var/lib/mysql/test/employee.csv” into table emp fields terminated by ‘,’ ignore 1 lines Error Code: 1290. The MySQL server is running with the --secure-file-priv option so it cann…

Linux应用层开发--多线程进程编程

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言一、linux开发的方向二、Linux环境特点介绍Linux环境基本构成 三、进程与线程1、进程的概念2、进程的状态3、线程的概念4、线…

leetcode 559. N 叉树的最大深度

2023.7.2 这道题还是使用层序遍历&#xff0c;在N叉树的层序遍历的基础上增加一个求深度的操作即可。下面上代码&#xff1a; class Solution { public:int maxDepth(Node* root) {int depth 0;queue<Node*> que;if(root nullptr) return 0;que.push(root);while(!que…

json 压缩算法详解

概要 无论使用何种编程语言&#xff0c;json格式的数据已被广泛应用&#xff0c;不论是数据的传输还是存储&#xff0c;在很多应用场景下&#xff0c;你可能想进一步地压缩JSON字符串的长度&#xff0c;以提升传输效率&#xff0c;如果你使用的是nosql数据库&#xff0c;你可能…