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

代码随想录刷题Day44

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

这道题,可以沿用二叉树的最近公共祖先的求法进行求解,也就是root判断-左右子树递归求LCA-根据左右子树的LCA结果返回值这一套。

但是,如果要用上搜索二叉树的有序性这个信息的话,就可以直接在递归时候确定结果,而不需要回溯了:如下,根据左子树节点都小于根节点,右子树节点都大于根节点的规律,从根节点不断往下递归,根据值的大小“剪枝”,直到不能剪枝时,返回结果:

class Solution {
public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if(p->val <root->val && q->val <root->val){//两个要找的值在当前根节点的左子树上return lowestCommonAncestor(root->left,p,q);}else if(p->val > root->val && q->val > root->val){//两个要找的值在当前根节点的右子树上return lowestCommonAncestor(root->right,p,q);}else return root;}
};

二叉搜索树中的插入操作

插入新节点,先找到新节点在树中的位置:val比节点小,则在左子树中找;val比节点大,则在右子树中找:

class Solution {
public:TreeNode* insertIntoBST(TreeNode* root, int val) {if(root==nullptr){return new TreeNode(val);}TreeNode* cur = root;TreeNode* pre =root;while(cur){pre = cur;if(val>cur->val){//插入右子树cur = cur->right;}else{//插入左子树cur = cur->left;}}if(val > pre->val) pre->right = new TreeNode(val);else pre->left = new TreeNode(val);return root;}
};

但是这里要注意的是,root是空树的情况,我第一边写,就忘了树可能为空,导致只有8个测试例子过了。

这两题,都是用到二叉搜索树的“有序”特性,和之前中序遍历验证的思路不一样,这里是使用二叉搜索树的有序性来指引递归的方向。

http://www.dtcms.com/a/354294.html

相关文章:

  • IDEA连接阿里云服务器中的Docker
  • 嵌入式学习日志————DMA直接存储器存取
  • 微信开发者工具中模拟调试现场扫描小程序二维码功能
  • Centos 7.6离线安装docker
  • 元宇宙+RWA:2025年虚拟资产与真实世界的金融融合实验
  • aiohttp模块如何使用
  • 开发避坑指南(39):Java List全null元素引发的空判断无效处理方案
  • 用LightRAG打造智能问答系统:知识图谱与RAG的融合应用实践
  • 如何在升级到S/4HANA后关闭SAP旧系统?
  • 3-4〔OSCP ◈ 研记〕❘ WEB应用攻击▸Burp Suite工具
  • MySQL中的InnoDB
  • pikachu-xss通关(1-8)
  • qt5+mingw64+opencv4.5.2搭建调试环境
  • FOC算法第二节 克拉克变换
  • mybatis-plus实现苍穹外卖项目-分类操作,不定期更新-day2
  • Hadoop(五)
  • AI、人工智能基础: 模型剪枝的概念与实践(PyTorch版)
  • uvloop深度实践:从原理到高性能异步应用实战
  • 死锁产生的条件是什么? 如何进行死锁诊断?
  • 本地部署DeepSeek大模型的基本方法
  • 自定义命令行补全机制的核心工具之compgen
  • web服务组件
  • MII的原理
  • 软件设计师备考-(三)操作系统基本原理
  • leetcode28. 找出字符串中第一个匹配项的下标
  • VR党建工作站-红色教育基地
  • 路由基础(三):静态路由、动态路由、默认路由
  • Linux系统 -- 线程(pthread)核心知识整理
  • 【golang长途旅行第33站】常量------补充知识点
  • 学习游戏制作记录(数据加密以及主菜单和画面优化)8.27