调试中...
调试中...
题目描述
题目描述
题解
题解
提交记录
提交记录
代码
代码
测试用例
测试用例
测试结果
测试结果
中等
相关标签
相关企业
提示

设计并实现一个算法,找出二叉树中某两个节点的第一个共同祖先。不得将其他的节点存储在另外的数据结构中。注意:这不一定是二叉搜索树。

例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]

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

示例 1:

输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
输出:3
解释:节点 5 和节点 1 的最近公共祖先是节点 3。

示例 2:

输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4
输出:5
解释:节点 5 和节点 4 的最近公共祖先是节点 5。因为根据定义最近公共祖先节点可以为节点本身。

提示:

所有节点的值都是唯一的。
p、q 为不同节点且均存在于给定的二叉树中。
通过次数
32.4K
提交次数
45.1K
通过率
71.8%


相关企业

提示 1
小心!你的算法处理只有一个节点的情况吗?会发生什么事?你可能要微调返回值。

提示 2
如果每个节点都有一个到其父节点的链接,我们可以利用9.2节问题2.7的方法。然而,面试官可能不会让我们作出这样的假设。

提示 3
第一个共同的祖先是最深的节点,这样p和q都是后代。想想你要如何识别这个节点。

提示 4
你如何弄清p是否为节点n的后代?

提示 5
从根节点开始。你能确定根是第一个共同祖先吗?如果不是,你能分辨出第一个共同祖先在根节点的哪一边吗?

提示 6
尝试递归方法。检查p和q是否为左子树和右子树的后代。如果它们是不同的树的后代,那么当前节点是第一个共同的祖先。如果它们是同一子树的后代,则该子树保存第一个共同祖先。现在,你该如何有效地实现它呢?

提示 7
在更简单的算法中,我们有一个方法表明x是n的后代,另一个方法是递归查找第一个共同的祖先。这样是在子树中反复搜索相同的元素。我们应该将其合并成一个firstCommonAncestor方法。那么什么样的返回值会给我们需要的信息?

提示 8
firstCommonAncestor函数可以返回第一个共同的祖先(如果p和q都包含在树里),如果p在树上而q不在,返回p;如果q在树上而p不在,返回q;否则,返回空。

评论 (0)

《程序员面试金典(第 6 版)》独家授权
本书是原谷歌资深面试官的经验之作,帮助了许多想要加入脸书、苹果、谷歌等 IT 名企的求职者拿到 Dream offer。本专题的 100+ 编程面试题是在原书基础上精心挑选出来的,帮助你轻松应战 IT 名企技术面试。
© 2025 领扣网络(上海)有限公司
0 人在线
行 1,列 1
运行和提交代码需要登录
root =
[3,5,1,6,2,0,8,null,null,7,4]
3
5
1
6
...
0
8
点击查看完整的二叉树
p =
5
q =
1
Source