当前位置: 首页 > news >正文

LeetCode75| 二叉搜索树

目录

700 二叉搜索树中的搜索

迭代 

递归

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


700 二叉搜索树中的搜索

注意二叉搜索树的性质即可 

迭代 

class Solution {
public:TreeNode* searchBST(TreeNode* root, int val) {while(root != NULL){if(root->val < val)root = root->right;else if(root->val > val)root = root->left;else return root;}return NULL;}
};

时间复杂度O(n)

空间复杂度O(n)

递归

class Solution {
public:TreeNode* searchBST(TreeNode* root, int val) {if(root == NULL)return NULL;if(root->val == val)return root;return root->val > val?searchBST(root->left,val) : searchBST(root->right,val); }
};

时间复杂度O(n)

空间复杂度O(1)

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

在删除待删除节点时有如下五种情况

  1. 没找到待删除节点,遍历到空节点后返回
  2. 待删除节点左右节点都为空,删除后直接返回空
  3. 待删除节点左节点为空,右节点不为空,删除节点后让右孩子作为根节点
  4. 待删除节点右节点为空,左节点不为空,删除节点后让左孩子作为根节点
  5. 待删除节点左右节点都不为空,将待删除节点的左孩子放到右孩子的最左节点的左孩子处,返回待删除节点的右孩子作为根节点
class Solution {
public:TreeNode* deleteNode(TreeNode* root, int key) {if(root == NULL)return NULL;//情况一if(root->val == key){if(root->left == NULL && root->right == NULL)return NULL;//情况二else if(root->left == NULL && root->right != NULL)return root->right;//情况三else if(root->left != NULL && root->right == NULL)return root->left;//情况四else{//情况五TreeNode* cur = root->right;while(cur->left != NULL){cur = cur->left;}cur->left = root->left;return root->right;}}if(root->val > key)root->left = deleteNode(root->left,key);if(root->val < key)root->right = deleteNode(root->right,key);return root;}
};

时间复杂度O(n)

空间复杂度O(n)

相关文章:

  • 新建虚拟环境并与Jupyter内核连接
  • 【Harmony OS - Stage应用模型】
  • Mybatis-Plus中怎么使用MySQL的内置函数
  • DevOps系列之 JNI实现Java调用C的实现案例
  • 负载均衡概述
  • 微服务(1)
  • ROS学习记录:使用RViz观测激光雷达传感器数据
  • Hive中支持毫秒级别的时间精度
  • 浅谈冯诺依曼体系和操作系统
  • SQL 解析 — 如何轻松实现新增语句
  • vite+Vue3学习笔记(3)——界面设计
  • Mybatis Java API - SqlSessionFactoryBuilder
  • 【ROS2】MOMO的鱼香ROS2(三)ROS2入门篇——ROS2第一个节点
  • SSH 端口转发:如何将服务绑定到本地 IP 地址
  • 观察者模式概述
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 「译」Node.js Streams 基础
  • classpath对获取配置文件的影响
  • CSS相对定位
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • Hexo+码云+git快速搭建免费的静态Blog
  • Hibernate最全面试题
  • iOS 系统授权开发
  • JavaScript-Array类型
  • js中的正则表达式入门
  • Mithril.js 入门介绍
  • php面试题 汇集2
  • Python实现BT种子转化为磁力链接【实战】
  • 如何胜任知名企业的商业数据分析师?
  • 为什么要用IPython/Jupyter?
  • ionic入门之数据绑定显示-1
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • #include
  • #LLM入门|Prompt#3.3_存储_Memory
  • #mysql 8.0 踩坑日记
  • #在 README.md 中生成项目目录结构
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (二)linux使用docker容器运行mysql
  • (附源码)计算机毕业设计高校学生选课系统
  • (算法)前K大的和
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET委托:一个关于C#的睡前故事
  • .Net组件程序设计之线程、并发管理(一)
  • @property @synthesize @dynamic 及相关属性作用探究
  • @开发者,一文搞懂什么是 C# 计时器!
  • [2016.7.Test1] T1 三进制异或
  • [2019/05/17]解决springboot测试List接口时JSON传参异常
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件