c++
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if (!root) return nullptr;
if (root == p || root == q) return root;
TreeNode *l = lowestCommonAncestor(root->left, p, q);
TreeNode *r = lowestCommonAncestor(root->right, p, q);
if (l && r) return root;
if (!r) return l;
return r;
}
};
js
var lowestCommonAncestor = function(root, p, q) {
if (!root) return null;
if (root === p || root === q) return root;
var l = lowestCommonAncestor(root.left, p, q);
var r = lowestCommonAncestor(root.right, p, q);
if (l && r) return root;
if (!r) return l;
return r;
};