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

二叉搜索树的最近祖先(递归遍历)

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

class Solution {
private:TreeNode*traversal(TreeNode*cur,TreeNode*p,TreeNode*q){if(cur==NULL){return NULL;}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;};
public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {return traversal(root,p,q);}
};

终止条件:在遍历到最后时,如果还没有找到目标节点,到达空节点,则将空返回给上一层递归。

单层递归逻辑:要想找到最近祖先,就是去找第一次到达q与p中间值的节点。由于二叉搜索树的特性,如果遍历到的节点值大于q与p,则向左面遍历;如果遍历到的节点值小于q与p,则向右面遍历。如果直接向下遍历,则会一直遍历左右子树的,遍历到的节点错过成为q与p祖先的情况。则要将递归遍历到的值返回给上一层。最后如果找到中间值点,则将遍历到的节点返回给上一层。

http://www.xdnf.cn/news/274249.html

相关文章:

  • 【神经网络与深度学习】生成模型-单位高斯分布 Generating Models-unit Gaussian distribution
  • Git 远程操作
  • SpringMVC详解
  • R绘图|3分钟复现瑞士“苏黎世大学”Nature全球地图——基于R包ggplot2+sf等
  • 集成算法学习
  • Ubuntu22.04及以上版本buildroot SIGSTKSZ 报错问题
  • Rockermq的部署与使用(0-1)
  • 理解计算机系统_并发编程(1)_并发基础和基于进程的并发
  • 【leetcode100】最长递增子序列
  • PyTorch数据集与数据集加载
  • ICCV2023 | 视觉Transformer的Token-标签对齐
  • window-docker的容器使用宿主机音频设备
  • 深入探索 Java 区块链技术:从核心原理到企业级实践
  • nginx 核心功能 02
  • 【项目篇之统一硬盘操作】仿照RabbitMQ模拟实现消息队列
  • C++入门小馆:继承
  • 数据库-数据类型,表的约束和基本查询操作
  • SONiC-OTN代码详解(具体内容待续)
  • set autotrace报错
  • K8S的使用(部署pod\service)+安装kubesphere图形化界面使用和操作
  • 【机器学习案列-22】基于线性回归(LR)的手机发布价格预测
  • 【iOS】消息流程探索
  • 基于python的task--时间片轮询
  • 为了结合后端而学习前端的学习日志——【黑洞光标特效】
  • VMware-centOS7安装redis分布式集群
  • 《Java高级编程:从原理到实战 - 进阶知识篇五》
  • 统计学中的p值是什么?怎么使用?
  • Ray开源程序 是用于扩展 AI 和 Python 应用程序的统一框架。Ray 由一个核心分布式运行时和一组用于简化 ML 计算的 AI 库组成
  • 初识 iOS 开发中的证书固定
  • flink常用算子整理