LeetCode236 Lowest Common Ancestor of a Binary Tree

图解LeetCode236:Lowest Common Ancestor of a Binary Tree 文章目录如何确定两个节点的公共节点?代码实现总结 二叉树最低公共祖先节点又是一道极为经典的算法题,同时也是面试官几乎用烂的一个题目,准备跳槽找工作的同学必知必会的一个面试题。 这个题目的要求非常简单,求出给定两个二叉树节点的公共祖先,如下所示的二叉树,那么节点5和节点1的3,我们该怎样解决这个问题呢?   如何确定两个节点的公共节点? 这个问题的关键点在于我们怎么就能确定某个节点是给定... 阅读详情
题目链接:

https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/

题目描述:

给一棵树,找两结点的最近公共祖先。

3
/ \
5 1
/ \ / \
6 2 0 8
/ \
7 4

LCA of nodes 5 and 1 is 3

LCA of nodes 5 and 4 is 5

题目分析:

设置两个标记变量pFind,qFind,当递归从根结点往下找,如果没有找到root与p或q相等,就让ptr_p和ptr_q随root一起变化,如果找到结点与p,标记pFind找到,这样当继续往下找的时候,ptr_p就不再改变,除非又回到ptr_p的上一层,当pFind与qFind都标记找到时,就可以不断的返回上一层找公共祖先。因为pFind或qFind单个标记找到时,往下找ptr_p或ptr_q不会再改变,这样就保证了只有往上找即找祖先时,才会出现ptr_p与ptr_q相等的情况(即是之前ptr_q与ptr_p随root一起变化时)。

第二次:
隔了几个月又来写这道题了,温故而知新。其实在普通树里面找两个节点的最近公共祖先。假设对于一个节点,如果在它的右子树里面只找到了其中一个目标节点,而在它的左子树中没有找到另一个目标节点,那么当前节点就不是目标节点的最近公共祖先了,但是如果在它的左子树中找到另一个目标节点,那么当前节点就是目标节点的公共祖先了。
所以,我们可以从叶子节点向上,标记子树中出现目标节点的情况。若一个节点的左右子树都有标记,则当前节点就是目标节点。

代码:
class Solution {
public:
    bool pFind=false;
    bool qFind=false;
    bool flag=false;
    void findLowestCommonAncestor(TreeNode* root,TreeNode* &LCA, TreeNode* ptr_p, TreeNode* ptr_q, TreeNode* p, TreeNode* q){
      if (root != NULL){
            if (pFind && qFind){
                return;
            }
            if (!pFind){
                ptr_p = root;
            }
            if (!qFind){
                ptr_q = root;
            }
            if (root == p){
                pFind = true;
            }
            if (root == q){
                qFind = true;
            }
            findLowestCommonAncestor(root->left,LCA, ptr_p, ptr_q, p, q);
            findLowestCommonAncestor(root->right,LCA, ptr_p, ptr_q, p, q);
            if (!flag && pFind && qFind && ptr_p == ptr_q){
                flag = true;
                LCA = ptr_p;
            }
      }
    }
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        TreeNode* LCA = NULL;
        findLowestCommonAncestor(root,LCA, root, root, p, q);
        return LCA;
    }
};

ps:太二了,写的时候还在想递归返回结点,结点岂不是要一直改变,咋把LCA返回,蠢哭,传个引用就好了啊。

第二次:

class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        if(root==NULL || root==p || root==q){
            return root;
        }
        TreeNode* left=lowestCommonAncestor(root->left,p,q);
        TreeNode* right=lowestCommonAncestor(root->right,p,q);
        if(left!=NULL && right!=NULL){
            return root;
        }
        return left==NULL? right:left;
    }
};
【老生谈算法】可视化通道流中瞬时涡量场的算法实现与MATLAB源码分析——瞬时涡量场 本文旨在探讨可视化通道流中瞬时涡量场的方法,并通过MATLAB编程实现这一过程。涡量场作为描述流体旋涡强度和方向的重要物理量,对于理解复杂流体运动具有重要意义。本文首先介绍了涡量场的基本概念,随后详细阐述了从测量数据收集到涡量场可视化的完整流程,并给出了相应的MATLAB源码。通过实际运行该源码,我们展示了涡量场的可视化结果,并讨论了其在流动结构识别和动力学行为理解中的应用。关键词: 涡量场;流体运动;MATLAB;可视化;PIV一、引言。 阅读详情

相关推荐

TC3xx芯片中断配置避坑指南:从AUTOSAR Davinci配置到SRN地址计算的完整流程

本文详细解析了英飞凌TC3xx芯片的中断配置流程,从AUTOSAR Davinci工具链到硬件调试的全链路指南。重点介绍了中断路由(IR)模块、服务请求节点(SRN)和中断控制单元(ICU)的配置技巧,帮助开发者避开常见陷阱,优化中断性能。

weixin_30628801的博客 411

【LeetCode 面试经典150题】236. Lowest Common Ancestor of a Binary Tree 二叉树的最近公共祖先

根据维基百科上对LCA的定义:“最低公共祖先是指在T中既是节点p的祖先又是节点q的祖先的最低节点(我们允许一个节点是其自身的后代)。解释: 节点 5 和节点 4 的最低公共祖先是 5,因为根据LCA定义,一个节点可以是其自身的后代。给定一个二叉树,找到树中两个给定节点的最低公共祖先(LCA)。该方法使用递归来查找二叉树中两个节点的最低公共祖先(LCA)。解释: 节点 5 和节点 1 的最低公共祖先是 3。

qq_43513394的博客 550

MIC(Maximal Information Coefficient)最大互信息系数

MIC(Maximal Information Coefficient)最大互信息系数是一种用于衡量两个变量之间相关性的统计量。它扩展了传统的互信息(MI)和条件互信息(CMI)的概念,具有更广泛的应用范围。MIC能够捕获包括功能性和非功能性的广泛的关联,具有普遍性和公平性。普遍性意味着在足够的样本量下,MIC能够捕捉到广泛的相关关系,而不仅仅局限于特定的功能类型;公平性则意味着MIC对不同类型的包含同等噪声的关系给出了相似的分数。需要注意的是,虽然MIC具有很多优点,但它也有一些局限性。

qlkaicx的博客 4604

Lowest Common Ancestor问题的解决思路

对于Off-Line的Lowest Common Ancestor问题,问题描述如下:   we are given a rooted tree T and an arbitrary set P{(u,v),...} of unordered pairs of nodes in T , and we wish to deter- mine the least common ancestor o

Pandoras Box 3800

单细胞monocle3分析流程再整理

定义root cell, 推断拟时方向# 结合先验知识自定(示例数据)# 可视化示例数据,起点是随便点的。

zfyyzhys的博客 2100

避坑指南:DeepSeek Function calling流式输出中的常见问题与解决方案

本文深入探讨了在DeepSeek Function Calling中实现流式输出时常见的参数拼接、函数依赖管理和错误处理等核心挑战。针对流式响应中参数碎片化的问题,提供了健壮的参数拼接方案与状态管理策略。同时,文章详细阐述了如何管理函数调用顺序、处理条件性执行,并构建了分阶段的错误处理与重试机制,旨在帮助开发者构建稳定、高效的流式AI应用。

weixin_29062671的博客 203

第19题 在二叉查找树中找到两个结点的最低公共祖先 Lowest Common Ancestor

本文来自《 programming interviews exposed》一书 题目: Given the value of two nodes in a binary search tree, find the lowest common ancestor. You may assume that both values already exist in the tree. The fun...

爱.NET 189

【Collibra 驱动 IPD 数据血缘治理】:三层图谱分层展示体系与全链路追踪的技术业务实践

(应用级/数据级/字段级)是理解复杂数据流动的核心手段。其价值不仅体现在可视化的直观性,更在于通过。技术保障血缘不可篡改性,进一步提升IPD数据治理的可靠性。,解决了跨层级血缘分析的性能与可用性矛盾。数据血缘图谱要素定义(字节跳动/腾讯云/信安标委)实现对IPD数据的精准追踪,而数据血缘图谱的。分层交互设计标准(智慧城市数据中台规范)Collibra技术文档(2024)字段级血缘的挑战与解决路径。自动优化血缘路径,并深化。字段级血缘技术实现方案。Collibra通过。图数据库性能优化原理。

百态·数智思维 | 聚焦大数据、量化与未来AI 1244

leetcode 236. Lowest Common Ancestor of a Binary Tree(python)

leetcode 236. Lowest Common Ancestor of a Binary Tree题目解法1:DFS解法2:BFS+字典参考 题目 Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree.According to the definition of L...

qq_37821701的博客 491

ISA-95(S95)标准详解

ISA-95是制造业系统集成的“通用语言”,通过分层模型和信息流规范,打通企业计划层与设备控制层,成为实现数字化工厂的核心标准之一。其与ISA-88的协同应用,可进一步优化生产执行与资源管理的效率。标准,旨在解决企业商业系统(如ERP)与工业控制系统(如MES、SCADA)之间的集成问题。

「东哥说MES」 专注于MES制造执行系统,为你拆解核心架构、功能模块及与ERP/PLC的集成逻辑。提供从入门到精通的系列干货、精选行业报告与实用工具,构建你的数字化知识体系,关注我,用实战经验照亮你的数字化之路。 3737

YOLOv11损失函数原理与源码解读:从调参血泪史到源码级优化

本文深入解析YOLOv11目标检测模型的损失函数设计,揭示其相比前代的关键改进。重点剖析了回归损失中动态权重的小目标优化、分类损失的带温度系数softmax、以及目标损失的自适应阈值机制等创新点。作者通过源码分析指出常见实现陷阱,如梯度回传的正确处理方式、标签分配的匹配策略等。结合实战经验,给出针对小目标检测、类别误判等典型问题的调参建议,并分享实用的调试工具代码片段。最后强调损失函数调参需结合具体任务,指出后处理对实际部署效果的重要影响。全文以工程实践为导向,为开发者提供可直接落地的优化思路。

as1225120794的博客 440

Leetcode 236. Lowest Common Ancestor of a Binary Tree

Leetcode 236. Lowest Common Ancestor of a Binary Tree @(LeetCode)[LeetCode, Algorithm, Tree] Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. Accord...

TooSchoolForCool 297

【Zephyr存储专题】06_存储块设备驱动开发(Nand Flash)

本文介绍了基于Zephyr系统的NAND Flash驱动实现方案,重点阐述了Flash驱动模型的核心架构和关键API设计。

zero的博客 1802

LeetCode 236. Lowest Common Ancestor of a Binary Tree 题解

本题是二叉树的经典问题,主要考察对树的遍历和递归的理解。递归深度优先搜索:代码简洁易懂,逻辑清晰,是最直观的解决方案。迭代后序遍历:避免了递归的栈溢出问题,适用于深度较大的树,但代码相对复杂。在实际应用中,递归方法通常是最首选的解决方案,因为它代码简洁且易于理解。但在处理深度较大的树时,迭代方法可能更为可靠。无论使用哪种方法,核心思想都是相同的:找到两个节点的路径,然后找到它们的最近公共祖先。

cannonjinx的博客 2276

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

leetcode 236: Lowest Common Ancestor of a Binary Tree

leetcode 236: Lowest Common Ancestor of a Binary Tree PYTHON, JAVA, C++

西施豆腐渣 7625

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

[LeetCode 236] Lowest Common Ancestor of a Binary Tree

Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two node

coder 进阶的专栏 3259

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Leetcode 236. Lowest Common Ancestor of a Binary Tree

/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ cla...

BJUT_bluecat的博客 286

Leetcode 236 Lowest Common Ancestor of a Binary Tree

Leetcode 236 Lowest Common Ancestor of a Binary Tree 题目描述 Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According to the definition of LCA on Wikipedia: “T...

qq_43271202的博客 218

[leetcode] 236. Lowest Common Ancestor of a Binary Tree @ python

原题 https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/ 解法 参考: LeetCode 236 Lowest Common Ancestor of a Binary Tree 【公瑾讲解】 使用递归, base case是返回root或None.然后使用分治法, 如果左右节点的lowestCommonAnc...

闲庭信步 583

【Python Leetcode】236. Lowest Common Ancestor of a Binary Tree

python leetcode 236 LCA的解法

jessie_31655616的博客 625

[Java]Leetcode236 Lowest Common Ancestor of a Binary Tree

求二叉树的公共父结点

fumier的专栏 1453

[leetcode 236]Lowest Common Ancestor of a Binary Tree

Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two node

ER_Plough的专栏 720

[LeetCode] 236. Lowest Common Ancestor of a Binary Tree

题目: Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between

Allen的专栏 511

LeetCode 236. Lowest Common Ancestor of a Binary Tree 详细题解

一:题意 给定一颗二叉树,两个节点p和q,求出节点p和节点q的最低公共祖先。 最先公共祖先的定义是:The lowest common ancestor is defined between two nodes p and q as the lowest node in T that has both p and q as descendants (where we allow a node to...

rainMan的博客 260

Leetcode236. Lowest Common Ancestor of a Binary Tree

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

magic_jiayu的博客 195

LeetCode 236 Lowest Common Ancestor of a Binary Tree

题目描述Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree.According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes v

Yano_nankai的博客 627
上一篇: LeetCode113 Path Sum II
下一篇: LeetCode96 Unique Binary Search Trees
_IanXiao
博客等级 码龄12年 84粉丝 241原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值