代码随想录算法训练营43期 | Day 20 —— 235.二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

代码随想录算法训练营

  • 代码随想录算法训练营43期
    • 235.二叉搜索树的最近公共祖先
    • 701.二叉搜索树中的插入操作
    • 450.删除二叉搜索树中的节点

代码随想录算法训练营43期

235.二叉搜索树的最近公共祖先

解题思路:
二叉搜索树一定是有序的
判断条件:
cur>p && cur>q,则可推出,公共祖先在左子树;
cur<p && cur<q,则可推出,公共祖先在右子树;

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/class Solution {
public:// 1. 确定递归函数的参数TreeNode* traversal(TreeNode* cur, TreeNode*p, TreeNode* q){// 2 确定递归函数的终止条件if(cur==NULL) return cur;//3 确定单层递归的顺序if(cur->val > p->val && cur->val > q->val){// 公共祖先在左子树中TreeNode* left = traversal(cur->left, p, q);if(left!=NULL)return left;}// 右子树if(cur->val < p->val && cur->val < q->val){TreeNode* right = traversal(cur->right, p, q);if(right!=NULL)return right;}return cur;}TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {return traversal(root, p, q);}
};

701.二叉搜索树中的插入操作

解题思路:
在叶子结点上插入我们新添加的元素

/*** 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* node = new TreeNode(val);// 返回上一层return node;}if (root->val > val) root->left = insertIntoBST(root->left, val);if (root->val < val) root->right = insertIntoBST(root->right, val);return root;}
};

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

二叉搜索树的删除操作,涉及到改变树的结构

  1. 确定递归函数的参数以及返回值
    TreeNode* deleteNode(TreeNode* root, int key)
  2. 确定终止条件
  3. 确定单层递归的逻辑

二叉搜索树删除节点遇到的五种情况:

  • 没找到删除的节点,返回
  • 找到删除的节点
    • 左右孩子节点都为空,直接删除节点
    • 删除节点左孩子为空,右孩子不为空,删除节点,右孩子补位,返回右孩子为根节点
    • 删除节点右孩子为空,左孩子不为空,删除节点,左孩子补位,返回左孩子为根节点
    • 左右孩子都不为空,删除节点的左子树头结点(左孩子)放到删除节点的右子树的最左面节点的左孩子上,返回删除节点右孩子为新的根节点

在这里插入图片描述

/*** 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* deleteNode(TreeNode* root, int key) {// 终止条件 没有找到该节点if(root==nullptr) return root;// 找到节点if(root->val == key) {if(root->left==nullptr&&root->right==nullptr){delete root;return nullptr;}else if(root->right==nullptr){TreeNode* rNode = root->left;delete root;return rNode;}else if(root->left==nullptr){TreeNode* lNode = root->right;delete root;return lNode;}// 第五种情况else{TreeNode* cur = root->right;while(cur->left!=nullptr){cur=cur->left;}cur->left = root->left;TreeNode* temp = root;root = root->right;delete temp;return root;}}if(root->val>key)   root->left = deleteNode(root->left, key);if(root->val<key)   root->right = deleteNode(root->right, key);return root;}
};

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

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

相关文章

MySQL索引知识个人笔记总结(持续整理)

本篇笔记是个人整理的索引知识总结&#xff0c;刚开始有点乱&#xff0c;后续会一直边学边整理边总结 索引&#xff08;index&#xff09;是帮助MySQL高效获取数据的数据结构(有序)。就好比索引就是数据的目录 索引结构 Btree索引,Hash索引,Full-text索引&#xff0c;R-tree(空…

【第十二章:Sentosa_DSML社区版-机器学习回归】

【第十二章&#xff1a;Sentosa_DSML社区版-机器学习回归】 12.1 线性回归 1.算子介绍 线性回归模型(BuildLRNode)是一个非常经典有效的回归模型&#xff0c;它假设所有特征变量和目标变量之间存在线性关系。通过训练来求得各个特征的权重以及截距。同时可以通过L1&#xff0…

GDPU 信息安全 天码行空1 用Wireshark分析典型TCP/IP体系中的协议

文章目录 一、实验目的二、实验内容三、实验步骤1. ICMP&#xff08;控制报文&#xff09;2. IPV4第一个包&#xff08;IPv4&#xff09;第二个包&#xff08;IPv4&#xff09;第三个包&#xff08;ICMP&#xff09; 3. TCP 三次握手 一、实验目的 通过Wireshark软件分析典型网…

网络安全 DVWA通关指南 DVWA Stored Cross Site Scripting (存储型 XSS)

DVWA Stored Cross Site Scripting (存储型 XSS) 文章目录 DVWA Stored Cross Site Scripting (存储型 XSS)XSS跨站原理存储型 LowMediumHighImpossible 参考文献 WEB 安全靶场通关指南 XSS跨站原理 当应用程序发送给浏览器的页面中包含用户提交的数据&#xff0c;但没有经过适…

对 JavaScript 原型的理解

笔者看了一些有关 JavaScript 原型的文章有感而发&#xff0c;就将所感所悟画了下来如果有理解错误和不足的地方&#xff0c;欢迎各位大佬指出&#xff0c;笔者感激不尽

搜索专利的方法

最近发现谷歌可以搜索专利的申请情况&#xff0c;比如&#xff1a; 谷歌专利 https://patents.google.com/?q%E5%B0%8F%E7%B1%B3&inventor%E9%9B%B7%E5%86%9B https://patents.google.com/ 就可以看到这位老兄申请了14个专利&#xff0c;点开可以看到里面的明细&#xff…

佰朔资本:沪指企稳反弹 半导体板块全天强势

降息预期提振金融板块 昨日午后&#xff0c;大金融板块明显发力&#xff0c;成为引领指数企稳上升的重要力气。到收盘&#xff0c;申万银行指数涨1.00%&#xff0c;工商银行涨超2%&#xff0c;招商银行、建设银行、农业银行等涨超1%&#xff1b;申万非银金融指数涨0.81%&#…

C++ 中的继承(详细讲解)

一、继承的概念以及定义 1、继承概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保 持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承呈现了面向对象 程序设计的…

Python开发深度学习常见安装包 error 解决

Python Python 是一种广泛使用的高级编程语言&#xff0c;它以其清晰的语法和代码可读性而闻名。Python 支持多种编程范式&#xff0c;包括面向对象、命令式、函数式和过程式编程。由于其简洁性和强大的标准库&#xff0c;Python 成为了数据科学、机器学习、网络开发、自动化脚…

CTFshow——萌新隐写(未完待续)

萌新隐写2 首先暴力破解密码&#xff0c;初始密码设为19000000即可 我用的是ziperello 萌新隐写3 萌新隐写4 word打开 - > 打开设置 - > 隐藏文字 - >flag出现 萌新隐写5 中文转unicode 16进制转字符串 base32解码 萌新隐写6 暂时不会。。。。 隐写1 打开就看到头是…

FPGA随记-二进制转格雷码

反射二进制码&#xff08;RBC&#xff09;&#xff0c;也称为反射二进制&#xff08;RB&#xff09;或格雷码&#xff08;Gray code&#xff09;&#xff0c;得名于Frank Gray&#xff0c;是二进制数制的一种排列方式&#xff0c;使得连续两个值之间仅有一个比特&#xff08;二…

组装电脑-电脑配置

键盘、鼠标&#xff1a;买一百多的机械盘。 主板 电脑台式机主板是计算机最基本的同时也是最重要的部件之一&#xff0c;它在整个计算机系统中扮演着举足轻重的角色。以下是对它的详细介绍&#xff1a; 基础功能&#xff1a; 主板作为计算机的核心部件&#xff0c;负责连接和…

嵌入式C语言自我修养:C语言的模块化的编程思想

不同模块如何集成到系统中去&#xff1f; 模块的编译和链接 一个C语言项目划分成不同的模块&#xff0c;通常由多个文件来实现。在项目编译过程中&#xff0c;编译器是以C源文件为单位进行编译的&#xff0c;每一个C源文件都会被编译器翻译成对应的一个目标文件。链接器对每一个…

【计算机基础题目】二叉树的前序中序后续遍历之间相互转换 详细例子

创作日志&#xff1a; 笔试题目&#xff0c;掌握了技巧之后这道题就是 so easy~ 一、 1、已知二叉树的 前序和中序&#xff0c;可以求出后序 2、已知二叉树的 中序和后序&#xff0c;可以求出前序 3、已知二叉树的 前序和后序&#xff0c;无法求出唯一的中序 二、求法 求法是…

《ElementUI/Plus 基础知识》el-table + sortablejs 实现 row 拖动改变顺序(Vue2/3适用)

前言 使用如下技术&#xff1a; ElementPlus Table 组件&#xff1b;插件 sortablejs &#xff08; npmjs/Github 地址&#xff09;&#xff1b; 实现 html 代码第 1 行&#xff0c;属性 row-key 一定要设置&#xff0c;否则会报错。即行数据的 Key&#xff0c;用来优化 t…

YOLO介绍—datawhale

速度快&#xff1a;YOLO的设计目标是实现快速的对象检测&#xff0c;它在保持相对高准确度的同时&#xff0c;能够实现高帧率的实时检测。 易于实现&#xff1a;YOLO的架构相对简单&#xff0c;易于理解和实现&#xff0c;这使得它在学术和工业界都得到了广泛的应用。 版本迭…

kubernetes调度2

1、各种缩写的应用 [rootk8s-master test]# kubectl get rsNAME DESIRED CURRENT READY AGEtest001-64c7957b5c 2 2 2 8m59stest001-698b98bb8f 0 0 0 12m[rootk8s-master test]# kubectl get replicas…

如何使用 Shopify 按国家_地区定制内容

如何使用 Shopify 按国家/地区定制内容 您客户的在线商店或应用是否已准备好在这个假日季利用跨境购物&#xff1f;在本高级教程中&#xff0c;我们将介绍如何向目标国家或地区提供内容和产品&#xff0c;以便您和您的客户能够最大限度地扩大品牌影响力&#xff0c;并改善客户…

VirtualBox 网络设置

VirtualBox 是一款非常流行的虚拟化软件&#xff0c;在计算机上创建虚拟环境运行不同操作系统和应用程序。网络设置在 VirtualBox 中至关重要&#xff0c;它决定了虚拟机能否连接到互联网或其他计算机&#xff0c;实现数据传输和共享。 在 VirtualBox 中创建虚拟机时&#xff…

java配置阿里云存储文件

1.maven导入依赖 <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.17.4</version></dependency> 如果使用的是Java 9及以上的版本&#xff0c;则还需要添加JAXB相关依赖。…