LeetCode:二叉树最低公共祖先

本文详细解析LeetCode第236题——二叉树最低公共祖先,探讨如何确定两个节点的公共祖先。通过分析大脑找到答案的过程,提炼出判断最低公共祖先的规则,并提供简洁的Java代码实现。最后强调,清晰理解问题是写出正确代码的关键。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二叉树最低公共祖先节点又是一道极为经典的算法题,LeetCode第236号题目,同时也是面试官几乎用烂的一个题目,准备跳槽找工作的同学必知必会的一个面试题。

这个题目的要求非常简单,求出给定两个二叉树节点的公共祖先,如下所示的二叉树,那么节点5和节点1的3,我们该怎样解决这个问题呢?


如何确定两个节点的公共节点?

这个问题的关键点在于我们怎么就能确定某个节点是给定条件下的公共节点,从图中我们能快速的知道节点5和节点1的公共节点是3,节点6和节点7的公共节点是5,问题是你有没有想过,你的大脑是如何知道节点6和节点7的公共祖先是5的?如果你能清晰的描述清楚这个过程,那么代码自然就能写出来了。

我们来看看为什么节点6和节点7的最低公共祖先是5。其实很简单,原因就在于节点5和左子树中包含了节点6,节点5的右子树中包含了节点7;也就是说只要我们找到了一个节点,其左右子树中分别包含了两个给定的节点,那么这个节点就是我们要找的答案。

意识到以上的关键就在于你要去想“为什么你的大脑知道节点6和节点7的公共祖先是5”,你的大脑是如何找到答案的?实际上你的大脑是这样找到答案的:

  • 找到节点6的所有祖先节点,也就是5和3

  • 找到节点7的所有祖先节点,也就是2、5和3

那么很显然节点6和节点7的所有祖先节点从5开始就一样了,因此节点5就是最低公共节点,如图所示:

此外我们还要考虑这样的特殊情况,那就是给定两个节点5和2,那么这两个节点的最低公共祖先节点是5,实际上这个特例并没有逃脱上述推导过程,你可以简单的认为一个节点的最低祖先其实是自己,由于节点5就是题目中给定的一个节点,而5的右子树中又包含2,那么5就是这两个节点的最低公共祖先。

现在让我们总结一下,什么样的节点才是我们需要找的最低公共祖先节点?

  • 如果一个节点的左子树和右

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值