算法训练Day22|235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点

简介: 算法训练Day22|235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点

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

235. 二叉搜索树的最近公共祖先 - 力扣(LeetCode)

1. 思路

利用二叉搜索树的特性,当root.val介于p.val和q.val时,即可返回root节点。

2. 代码实现

 1class Solution {
 2    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
 3        // root介于p和q之间时进行返回即可
 4
 5       if (root.val > p.val && root.val > q.val) { // root 在p\q的右侧,向左遍历
 6           return lowestCommonAncestor(root.left, p, q);
 7       } 
 8       if (root.val < p.val && root.val < q.val) { // root 在p\q的左侧,向右遍历
 9           return lowestCommonAncestor(root.right, p, q);
10       }
11       return root; // 找到了结果
12    }

3. 复杂度分析

时间复杂度:O(n).最坏情况下为链表。

空间复杂度:O(n).最坏情况下是链表,则调用n层递归函数,栈的开销也一致。


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

701. 二叉搜索树中的插入操作 - 力扣(LeetCode)


1. 思路

利用二叉搜索树的特性,遇到空节点即可将该值val创建新节点并加入到树中。前序遍历~


2. 代码实现

 1class Solution {
 2    // 确定递归函数的参数及返回值
 3    public TreeNode insertIntoBST(TreeNode root, int val) {
 4        // 遇到空节点将该值加入其中并返回(确定递归函数的终止条件)
 5        if (root == null) {
 6            TreeNode node = new TreeNode(val);
 7            return node;
 8        }
 9
10        if (val < root.val) {
11            root.left = insertIntoBST(root.left, val);
12        } else if (val > root.val) {
13            root.right = insertIntoBST(root.right, val);
14        } 
15        return root;
16    }
17}

3. 复杂度分析

时间复杂度:O(1)

空间复杂度:O(1)


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

450. 删除二叉搜索树中的节点 - 力扣(LeetCode)


1. 思路

递归三部曲

是否有相等值,没有直接返回null,有则进行递归遍历判断,再判断该节点是否有左右子树的情况,当左右子树均不为空时,将该节点的左子树挂到右子树的左子节点上。


2. 代码实现

 1class Solution {
 2    public TreeNode deleteNode(TreeNode root, int key) {
 3        if (root == null) { // 如果根节点为空,直接返回null
 4            return null;
 5        }
 6        if (root.val > key) { // 如果根节点的值大于目标值,递归删除左子树中的目标节点
 7            root.left = deleteNode(root.left, key);
 8            return root;
 9        }
10        if (root.val < key) { // 如果根节点的值小于目标值,递归删除右子树中的目标节点
11            root.right = deleteNode(root.right, key);
12            return root;
13        }
14        if (root.val == key) { // 如果根节点的值等于目标值
15            if (root.left == null && root.right == null) { // 如果根节点没有左右子树,直接返回null
16                return null;
17            }
18            if (root.right == null) { // 如果根节点只有左子树,返回左子树
19                return root.left;
20            }
21            if (root.left == null) { // 如果根节点只有右子树,返回右子树
22                return root.right;
23            }
24            TreeNode successor = root.right; // 找到根节点的后继节点
25            while (successor.left != null) { // 后继节点是右子树中最左边的节点
26                successor = successor.left;
27            }
28            root.right = deleteNode(root.right, successor.val); // 递归删除右子树中的后继节点
29            successor.right = root.right; // 将根节点的右子树赋值给后继节点的右子树
30            successor.left = root.left; // 将根节点的左子树赋值给后继节点的左子树
31            return successor;
32        }
33        return root;
34    }
35}

3. 复杂度分析

时间复杂度:O(n).

空间复杂度:O(n).做坏的情况时链表,递归深度为n层递归函数,栈的空间消耗也为O(n).

相关文章
|
11天前
|
机器学习/深度学习 运维 算法
基于粒子群优化算法的配电网光伏储能双层优化配置模型[IEEE33节点](选址定容)(Matlab代码实现)
基于粒子群优化算法的配电网光伏储能双层优化配置模型[IEEE33节点](选址定容)(Matlab代码实现)
|
26天前
|
机器学习/深度学习 并行计算 算法
基于改进的粒子群算法PSO求解电容器布局优化问题HV配电中的功率损耗和成本 IEEE34节点(Matlab代码实现)
基于改进的粒子群算法PSO求解电容器布局优化问题HV配电中的功率损耗和成本 IEEE34节点(Matlab代码实现)
|
10天前
|
并行计算 算法 安全
【ADMM、碳排放】基于分布式ADMM算法的考虑碳排放交易的电力系统优化调度研究【IEEE6节点、IEEE30节点、IEEE118节点】(Matlab代码实现)
【ADMM、碳排放】基于分布式ADMM算法的考虑碳排放交易的电力系统优化调度研究【IEEE6节点、IEEE30节点、IEEE118节点】(Matlab代码实现)
|
28天前
|
机器学习/深度学习 算法 数据挖掘
基于自适应遗传算法风光场景生成的电动汽车并网优化调度【IEEE33节点】(Matlab代码实现)
基于自适应遗传算法风光场景生成的电动汽车并网优化调度【IEEE33节点】(Matlab代码实现)
|
4月前
|
SQL 分布式计算 DataWorks
使用DataWorks PyODPS节点调用XGBoost算法
本文介绍如何在DataWorks中通过PyODPS3节点调用XGBoost算法完成模型训练与测试,并实现周期离线调度。主要内容包括:1) 使用ODPS SQL构建数据集;2) 创建PyODPS3节点进行数据处理与模型训练;3) 构建支持XGBoost的自定义镜像;4) 测试运行并选择对应镜像。适用于需要集成机器学习算法到大数据工作流的用户。
182 24
|
4月前
|
传感器 算法 数据安全/隐私保护
基于GA遗传优化的三维空间WSN网络最优节点部署算法matlab仿真
本程序基于遗传算法(GA)优化三维空间无线传感网络(WSN)的节点部署,通过MATLAB2022A实现仿真。算法旨在以最少的节点实现最大覆盖度,综合考虑空间覆盖、连通性、能耗管理及成本控制等关键问题。核心思想包括染色体编码节点位置、适应度函数评估性能,并采用网格填充法近似计算覆盖率。该方法可显著提升WSN在三维空间中的部署效率与经济性,为实际应用提供有力支持。
|
4月前
|
存储 监控 算法
公司内部网络监控中的二叉搜索树算法:基于 Node.js 的实时设备状态管理
在数字化办公生态系统中,公司内部网络监控已成为企业信息安全管理体系的核心构成要素。随着局域网内终端设备数量呈指数级增长,实现设备状态的实时追踪与异常节点的快速定位,已成为亟待解决的关键技术难题。传统线性数据结构在处理动态更新的设备信息时,存在检索效率低下的固有缺陷;而树形数据结构因其天然的分层特性与高效的检索机制,逐渐成为网络监控领域的研究热点。本文以二叉搜索树(Binary Search Tree, BST)作为研究对象,系统探讨其在公司内部网络监控场景中的应用机制,并基于 Node.js 平台构建一套具备实时更新与快速查询功能的设备状态管理算法框架。
133 3
|
6月前
|
算法 Java
算法系列之数据结构-二叉搜索树
二叉查找树(Binary Search Tree,简称BST)是一种常用的数据结构,它能够高效地进行查找、插入和删除操作。二叉查找树的特点是,对于树中的每个节点,其左子树中的所有节点都小于该节点,而右子树中的所有节点都大于该节点。
191 22
|
6月前
|
存储 监控 算法
基于 PHP 二叉搜索树算法的内网行为管理机制探究
在当今数字化网络环境中,内网行为管理对于企业网络安全及高效运营具有至关重要的意义。它涵盖对企业内部网络中各类行为的监测、分析与管控。在内网行为管理技术体系里,算法与数据结构扮演着核心角色。本文将深入探究 PHP 语言中的二叉搜索树算法于内网行为管理中的应用。
69 4
|
7月前
|
监控 算法 安全
关于公司电脑桌面监控中 PHP 二叉搜索树算法的深度剖析
在现代企业管理中,公司电脑桌面监控系统通过二叉搜索树(BST)算法保障信息安全和提高效率。本文探讨PHP中的BST在监控场景的应用,包括节点定义、插入与查找操作,并展示如何管理时间戳数据,以快速查询特定时间段内的操作记录。BST的高效性使其成为处理复杂监控数据的理想选择。
65 2

热门文章

最新文章