题目链接:
236. 二叉树的最近公共祖先 - 力扣(LeetCode)
题解:
1. 我们需要重视的问题是 —— 公共祖先有可能是 p 和 q 本身,我们把解题思路变简单点,在 dfs 时,判断 当前 节点是否 能满足是公共祖先的条件,需要满足四个条件
- 当前 root 是 p
- 当前 root 是 q
- 当前 root 左子树满足该条件
- 当前 root 右子树满足该条件
简单点来说 我们只需要满足这个节点 包含 p q ,也就是满足其中 2 个 条件就好了
所以我们计数,需要 深搜到底,第一次出现为 2 的条件,必定是最近的,因为我们不断搜索,最先出来的一定是最近的
代码:
/**
* @param {TreeNode} root
* @param {TreeNode} p
* @param {TreeNode} q
* @return {TreeNode}
*/
var lowestCommonAncestor = function (root, p, q) {
let res, isFirst = false;
function map(root) {
if (root === null) return 0
if (isFirst) return 0
let flag = (root === p) + (root === q) + map(root.left) + map(root.right)
if (flag === 2 && !isFirst) {
isFirst = true
res = root
}
return flag
}
map(root)
return res
};

2万+

被折叠的 条评论
为什么被折叠?



