利用二叉树的性质,
var lowestCommonAncestor = function(root, p, q) {
//二叉搜索树
if (root==null){
return null
}
if(p.val<root.val&&q.val<root.val){
return lowestCommonAncestor(root.left,p,q)
}
else if(p.val>root.val&&q.val>root.val){
return lowestCommonAncestor(root.right,p,q)
}
else return root
};
普通二叉树但是每个节点的值不同
var lowestCommonAncestor = function(root, p, q) {
let ans;
//每个节点记录了它左右子节点的情况:判断节点及节点以下的节点是否含有p或者q
//判断每个节点是否满足题中的条件。
//判断当前节点及该节点以下的节点是否含有p或者q,并返回
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 ((lson && rson) || ((root.val === p.val || root.val === q.val) && (lson || rson))) {
ans = root;
}
return lson || rson || (root.val === p.val || root.val === q.val);
}
dfs(root, p, q);
return ans;
};