一、题目描述
二、解题思路
两种情况:
- p、q均不是最近公共祖先
- p、q其中一个是另一个的祖先
因此通过递归由底至上寻找,记录根节点的左右子树是否都有p和q,若是,则该根节点就是最近的公共祖先。或者根节点是p或q时,该根节点的左右子树是否有另外的节点,若是,则该根节点是最近公共祖先。
三、代码实现
var lowestCommonAncestor = function(root, p, q) {
let res
const dfs = (root,p,q)=>{
if(root==null) return false
const lson = dfs(root.left,p,q)
const rson = dfs(root.right,p,q)
if((rson&&lson) || ((root.val == p.val || root.val == q.val) && (lson || rson))){
res = root
}
return lson || rson || (root.val == p.val || root.val == q.val);
}
dfs(root, p, q);
return res
};