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

LeetCode 刷题 [C++] 第236题.二叉树的最近公共祖先

题目描述

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

在这里插入图片描述

题目分析

  1. 首先需要注意下提示信息:
    a. 二叉树中所有节点中的值互不相同;
    b. p不等于q;
    c. p和q均存在于给定的二叉树中。
  2. 根据题意可知,若node节点为p,q的最近公共祖先,则可能的情况如下:
    a. p 和 q分别在node的左右子树中;
    b. p = node, 且q在node的左/右子树中;
    c. q = node,且p在node的左/右子树中。
  3. 从根节点开始遍历,递归向左右子树进行遍历;
    a. 递归结束条件:当前查询节点为null,或者当前节点为p或q,则返回当前节点
    b. 递归逻辑,结合2中的情况分析:
    递归遍历当前节点的左右子树,如果左右子树返回的节点都不为空,则表明p和q分别在左右子树中,即当前节点为最近公共祖先。
    如果左右子树返回节点其中一个不为空,则返回非空节点。

Code

class Solution {
public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if (nullptr == root || p == root || q == root) {return root;}TreeNode* left = lowestCommonAncestor(root->left, p, q);TreeNode* right = lowestCommonAncestor(root->right, p , q);if (nullptr == left) {return right;}if (nullptr == right) {return left;}return root;}
};
http://www.lryc.cn/news/308673.html

相关文章:

  • vue3+vite 项目的创建
  • Windows Server 2022 使用ApacheDS用户认证
  • 【Oracle】Oracle清理日志空间
  • 数据抽取平台pydatax介绍--实现和项目使用
  • 容易发生内存泄漏的八个场景,你都知道吗?
  • 掌握 Vue3 中的 setup 函数
  • BUUCTF AWD-Test1
  • 百亿诈骗案频出,欧科云链用“技术责任”拓宽Web3安全边界
  • 一个实时波形图的封装demo(QT)(qcustomplot)
  • Java进阶-反射
  • 力扣180 连续出现的数字
  • C++面试 -操作系统-架构能力:内存问题分析与性能优化
  • 基于springboot+vue的共享汽车管理系统(前后端分离)
  • All Roads Lead to Rome (30)
  • GO语言学习笔记(与Java的比较学习)(四)
  • 在实训云平台上配置云主机
  • 什么是隔离式栅极驱动器?
  • 蓝桥杯算法赛 第 6 场 小白入门赛 解题报告 | 珂学家 | 简单场 + 元宵节日快乐
  • 附加Numpy数组
  • 收银系统源码-智慧新零售,ERP进销存功能详解
  • STM32使用PB3, PB4引脚的注意事项
  • OSCP靶场--DVR4
  • 【嵌入式——QT】日期与定时器
  • 如何决定使用HashMap还是TreeMap?
  • 平台工程与安全
  • 智能咖啡厅助手:人形机器人 +融合大模型,行为驱动的智能咖啡厅机器人(机器人大模型与具身智能挑战赛)
  • js处理IOS虚拟键盘弹出后输入框被遮住
  • 脚手架工程使用ElementUI
  • 163邮箱SMTP端口号及服务器地址详细设置?
  • 【STM32】STM32学习笔记-独立看门狗和窗口看门狗(47)