/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
struct TreeNode* lowestCommonAncestor(struct TreeNode* root, struct TreeNode* p, struct TreeNode* q) {
if (!root){
return NULL;
}
if (root == p || root == q){
return root;
}
struct TreeNode* left = lowestCommonAncestor(root -> left, p, q);
struct TreeNode* right = lowestCommonAncestor(root -> right, p, q);
if (left && right){ // p, q 分别位于 x 的左子树和右子树;
return root;
}else if (left){ // p, q 都在 x 的左子树(也包括祖先其自身,另一个字节点在左子树);
return left;
}else if (right){ // p, q 都在 x 的右子树(也包括祖先其自身,另一个字节点在右子树);
return right;
}
return NULL;
}