Leetcode:701. 二叉搜索树中的插入操作(C++)

news2024/11/19 13:28:29

目录

问题描述:

实现代码与解析:

递归:

原理思路:

迭代:

原理思路:


问题描述:

        给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。

注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。

示例 1:

输入:root = [4,2,7,1,3], val = 5
输出:[4,2,7,1,3,5]
解释:另一个满足题目要求可以通过的树是:

示例 2:

输入:root = [40,20,60,10,30,50,70], val = 25
输出:[40,20,60,10,30,50,70,null,null,25]

示例 3:

输入:root = [4,2,7,1,3,null,null,null,null,null,null], val = 5
输出:[4,2,7,1,3,5]

实现代码与解析:

递归:

class Solution {
public:
    TreeNode* insertIntoBST(TreeNode* root, int val) 
    {
        if(root==NULL)
        {
            TreeNode* node=new TreeNode(val);
            return node;
        }
        //大于向右
        if(val>root->val)
        {
            root->right=insertIntoBST(root->right,val);
        }
        //小于向左
        if(val<root->val)
        {
            root->left=insertIntoBST(root->left,val);
        }
        return root;
    }
};

原理思路:

        比较简单,有多种方法,这里我们直接选择在叶子结点插入即可,直接比较结点大小来选择递归方向,不用遍历整个树。

迭代:

class Solution {
public:
    TreeNode* insertIntoBST(TreeNode* root, int val) 
    {
        //根节点为空
        if (root == NULL) 
        {
            TreeNode* node = new TreeNode(val);
            return node;
        }
        TreeNode* cur=root;
        TreeNode* pre= root; // 记录上一个节点
        while (cur != NULL) 
        {
            pre=cur;//更新上一个结点
            if (cur->val > val) cur = cur->left;//向左
            else cur = cur->right;//向右
        }
        TreeNode* node = new TreeNode(val);
        if (val < parent->val) parent->left = node;// 进行连接
        else parent->right = node;
        return root;
    }
};

原理思路:

        与递归同,不过这里要记录上一个结点,来进行结点之间的连接,具体可以看注释。

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

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

相关文章

Codeforces Round #843 (Div. 2)——A,B,C,E

​​​​​​​​​​​Dashboard - Codeforces Round #842 (Div. 2) - Codeforces A: 思维构造 题意&#xff1a;给定一个由 ab 组成的字符串&#xff0c;将该字符串拆分成 3 个部分&#xff08;a&#xff0c;b&#xff0c;c&#xff09;&#xff0c;要求中间部分的字典序最大…

2022 年终总结

在 12 月 31 号晚上这天&#xff0c;打开朋友圈大家都在告别 2022、迎接 2023&#xff0c;我却想不到任何值得发的内容。没有外出体会元旦的节日氛围&#xff0c;也没有观看任何跨年活动&#xff0c;2022 年最后一秒跟全年的 3153.6 万秒没有任何区别。 甚至这篇总结都差点没有…

RK3568源码编译与交叉编译环境搭建

本篇进行飞凌OK3568-C开发板的Linux系统开发需要用的软件交叉编译环境的配置。 对于软件开发&#xff0c;如果只是使用C/C代码&#xff0c;则在自己的Ubuntu虚拟机中添加RK3568对应的交叉编译器(gcc/g)即可&#xff0c;如果要进行Qt开发&#xff0c;则还要再交叉编译与RK3568配…

UDS诊断系列介绍09-1485服务

本文框架1. 系列介绍1.1 14服务概述1.2 85服务概述2. 14服务请求与应答2.1 14服务请求2.2 14服务正响应3. 85服务请求与应答3.1 85服务请求3.2 85服务正响应3.3 否定应答4. Autosar系列文章快速链接1. 系列介绍 UDS&#xff08;Unified Diagnostic Services&#xff09;协议&a…

graalvm+spring-cloud-gateway打造又快又小的类nginx本地网关

前言 网关是微服务架构的入口&#xff0c;外网请求通过网关转发到独立的微服务。项目一般会经过多个环境的测试&#xff0c;最终发布到生产。一个http请求&#xff0c;如&#xff1a;http://public_host/api/v1/some_service/some_path?ab&cd会先经过公网域名&#xff0c…

ThinkPHP5.x未开启强制路由(s参数)RCE

官方公告&#xff1a;https://blog.thinkphp.cn/869075 由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下可能的getshell漏洞&#xff0c;受影响的版本包括5.0和5.1版本 ThinkPHP5基础 环境搭建 官网直接下载完整包 https://www.thinkphp.cn/down/870.…

ElasticSearch集群架构及底层原理

前言ElasticSearch考虑到大数据量的情况&#xff0c;集群有很多的部署模式&#xff0c;本篇不会具体进行演示了&#xff0c;只是说明一下有哪些架构可以选&#xff0c;及一些原理的简单介绍&#xff0c;如果要看具体操作的那么可以自行进行搜索&#xff0c;这不是本篇博客要介绍…

OCR文字识别软件哪个好?7大文字识别软件

由于从各种文档中提取文本的需求非常普遍&#xff0c;许多办公软件或公司都提供了OCR工具。在本文中&#xff0c;我们为您推出了一系列功能强大且易于使用的最佳 OCR 软件。 什么是 OCR 软件&#xff1f; OCR 软件是一种程序或工具&#xff0c;可以使用光学字符识别技术识别数…

小红书数据分析网站:揭晓普通博主1个月涨粉百万的密码!

导语&#xff1a; 随着2023年的来临&#xff0c;回首小红书动态&#xff0c;行业热度依旧高涨&#xff0c;越来越多的达人涌入小红书。在时尚领域&#xff0c;更是出现了如氧化菊这样的大势变装博主&#xff01;短短一周涨粉13W的变装博主为何能突围&#xff0c;强势吸睛呢&am…

[LCTF]bestphp2022安洵杯 babyphp

目录 <1> [LCTF]bestphp‘s revenge SoapClient触发反序列化导致ssrf serialize_hander处理session方式不同导致session注入 crlf漏洞 <2> 安洵杯 babyphp SoapClient 触发ssrf session反序列化 利用文件操作原生类读取flag <3> XCTF Final Web1 解…

Spring Security 解析(六) —— 基于JWT的单点登陆(SSO)开发及原理解析

Spring Security 解析(六) —— 基于JWT的单点登陆(SSO)开发及原理解析 在学习Spring Cloud 时&#xff0c;遇到了授权服务oauth 相关内容时&#xff0c;总是一知半解&#xff0c;因此决定先把Spring Security 、Spring Security Oauth2 等权限、认证相关的内容、原理及设计学习…

[极客大挑战 2019]Secret File

目录 信息收集 解题思路 信息收集 先看源码&#xff0c;发现一个php文件 <a id"master" href"./Archive_room.php" style"background-color:#000000;height:70px;width:200px;color:black;left:44%;cursor:default;">Oh! You found me&…

9.2 容器库概览

文章目录所有容器的共性&#xff1a;迭代器迭代器的范围容器类型成员begin和end成员容器的定义和初始化与顺序容器大小相关的构造函数赋值和swapassignedswap容器大小操作关系运算符所有容器的共性&#xff1a; 表格一&#xff1a; 类型别名说明iterator迭代器const_iterator…

用R语言理解全微分

文章目录6 全微分梯度的概念全微分前情提要 R语言微积分极限π,e,γ\pi, e, \gammaπ,e,γ洛必达法则连续性和导数数值导数差商与牛顿插值方向导数 6 全微分 梯度的概念 对于任意函数f(x0,x1,⋯,xn)f(x_0,x_1,\cdots,x_n)f(x0​,x1​,⋯,xn​)&#xff0c;其梯度为 ∇f(∂f∂…

解决从BIOS选择从U盘启动但是系统仍然从硬盘启动的问题

我怀疑是BIOS失去了记忆能力&#xff0c;不能记住我的选择&#xff0c;所以仍然按默认从硬盘启动。 解决&#xff1a;重置BIOS即可 下面用物理方法重置BIOS。 在主板上找到这三根针&#xff0c;将上面的黑色套子拔出&#xff0c;然后插入旁边的另外两根针&#xff0c;例如开始…

基于python知识图谱医疗领域问答系统实现

直接上结果展示: “让人类永远保持理智,确实是一种奢求” ,机器人莫斯,《流浪地球》 项目概况 本项目为一个使用深度学习方法解析问题,知识图谱存储、查询知识点,基于医疗垂直领域的对话系统的后台程序 运行效果:

aws beanstalk 结合packer创建自定义平台

参考资料 https://github.com/aws-samples/eb-custom-platforms-samples#updating-packer-templateElastic Beanstalk 自定义平台 今天使用eb平台创建环境的时候&#xff0c;发现有名为packer的选项&#xff0c;查询文档发现aws beanstalk支持自定义平台&#xff0c;这功能几…

4. 使用预训练的PyTorch网络进行图像分类

4. 使用预训练的PyTorch网络进行图像分类 这篇博客将介绍如何使用PyTorch预先训练的网络执行图像分类。利用这些网络只需几行代码就可以准确地对1000个常见对象类别进行分类。这些图像分类网络是开创性的、最先进的图像分类网络&#xff0c;包括VGG16、VGG19、Inception、Dens…

windows下 pytorch的安装(gpu版本以及cpu版本)

一. 查看是否有gpu 打开cmd 输入nvidia-smi 是以下这种情况的就是有gpu 没有gpu的话就会报错 下载安装cuda以及cudnn&#xff08;安装cpu版本可以跳过此步骤直接进行pytorch的安装&#xff09; 下载cuda 看清楚两个箭头指的地方 一个是11.3.0 一个是日期 后面下载cudnn的时…

ProEssentials Pro 9.8.0.32 Crack

ProEssentials .Net图表组件用于对您的科学、工程和金融图表进行评估和选择&#xff01; Winforms 图表, WPF 图表, C/MFC/VCL 图表. Gigasoft拥有20多年帮助企业开发大型客户端和嵌入式图表项目的经验 为何选择ProEssentials&#xff1f; 我们真诚地希望您能针对您的具体实施…