二叉搜素树中的插入操作(力扣701)

news/2025/2/4 9:44:43 标签: leetcode, 数据结构, 算法, 职场和发展

为了满足题目的要求,我们可以选择在叶子节点之后添加节点,这样既可以满足题目要求,也不会破坏二叉搜索树的结构。在二叉搜索树中递归的时候,要根据大小,选择进行左递归还是右递归。当递归到空节点的时候,我们就可以添加节点了。同时,递归函数的返回值要用变量接收。这里的返回值为指针,我们采取链表的连接方式接收返回值,相当于将子树加入到该二叉搜索树中。这是大致思路,大家可以结合我下面的代码及注释理解此题。

代码及注释如下:

/**
 * 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 {
public:
    TreeNode* insertIntoBST(TreeNode* root, int val) {
        //终止条件:遍历到空节点时添加新的节点,同时将该节点返回
       if(root == NULL){
        TreeNode* newNode = new TreeNode(val);
        return newNode;
       }
       //根据二叉搜索树的性质,通过比较节点大小来判断是左右递归中的哪一种递归方式
       if(val < root -> val){
        root -> left = insertIntoBST(root -> left,val);//用链表连接的方式接收返回值
       }
       if(val > root -> val){
        root -> right = insertIntoBST(root -> right,val);
       }
       return root;//返回子树的父节点,并且是从下往上返回
    }
};


http://www.niftyadmin.cn/n/5841456.html

相关文章

docker pull Error response from daemon问题

里面填写 里面解决方案就是挂代理。 以虚拟机为例&#xff0c;将宿主机配置端口设置&#xff0c;https/http端口设为7899 配置虚拟机的http代理&#xff1a; vim /etc/systemd/system/docker.service.d/http-proxy.conf里面填写&#xff0c;wq保存 [Service] Environment…

Docker 部署教程jenkins

Docker 部署 jenkins 教程 Jenkins 官方网站 Jenkins 是一个开源的自动化服务器&#xff0c;主要用于持续集成&#xff08;CI&#xff09;和持续交付&#xff08;CD&#xff09;过程。它帮助开发人员自动化构建、测试和部署应用程序&#xff0c;显著提高软件开发的效率和质量…

C++初阶 -- vector容器的接口详解

目录 一、vector简介 二、vector的构造函数 三、vector的迭代器 四、vector 空间增长问题&#xff08;主要谈resize和reserve&#xff09; 4.1 resize 4.2 reserve 五、vector 增删查改 5.1 push_back 和 pop_back(尾插、尾删) 5.2 find函数 5.3 insert 和 erase函数 …

android java 用系统弹窗的方式实现模拟点击动画特效

接上一篇&#xff1a;android java系统弹窗的基础模板-CSDN博客 本篇记录的是系统弹窗的一个应用示例&#xff1a;实现点击动画效果 首先模拟点击的实现参考&#xff1a;android模拟点击_motionevent upevent motionevent.obtain(systemclo-CSDN博客 动画效果&#xff0c;是…

【编译系列】Torch.compile()训练编译——算子融合逻辑 工程化

1. 背景: torch.compile()中,Dynamo作为前端负责计算图的捕获,后端有inductor、tvm等进行编译优化。 Dynamo:在Python字节码层面注入pass,实现bytecode-to-bytecode的优化,通过对bytecode逐行进行解析构建FX GraphInductor:负责对FX Graph进行AOTAutograd生成joint-gra…

如何在 Typecho 中实现 Joe 编辑器标签自动填充

如何在 Typecho 中实现 Joe 编辑器标签自动填充 在 Typecho 的文章编辑过程中&#xff0c;如果你使用 Joe 编辑器&#xff0c;可能会希望输入#标签后能自动提取并填充到文章的标签输入框中&#xff0c;以提高工作效率。接下来&#xff0c;我们将详细介绍如何通过开发一个 Type…

零碎的知识点(十二):“期望” 是什么?

“期望” 是什么&#xff1f; 期望&#xff08;数学期望&#xff09;的详细解释与示例1. 期望的定义2. 期望的意义 3. 计算步骤与示例示例1&#xff1a;掷骰子的期望示例2&#xff1a;抽奖活动的期望收益示例3&#xff1a;投资决策的期望回报 4. 期望的性质5. 期望的常见误区6.…

高阶开发基础——快速入门C++并发编程6——大作业:实现一个超级迷你的线程池

目录 实现一个无返回的线程池 完全代码实现 Reference 实现一个无返回的线程池 实现一个简单的线程池非常简单&#xff0c;我们首先聊一聊线程池的定义&#xff1a; 线程池&#xff08;Thread Pool&#xff09; 是一种并发编程的设计模式&#xff0c;用于管理和复用多个线程…