
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if(root==NULL||root==p||root==q) // 叶节点 或者找到其中一个节点
return root;
TreeNode* left = lowestCommonAncestor(root->left, p, q);
TreeNode* right = lowestCommonAncestor(root->right, p, q);
if(left==NULL&&right==NULL) // 没找到
return NULL;
if(left==NULL) // 左子树没找到,右子树找到。
return right;
if(right==NULL)
return left;
return root; // 在左右子树找到。
// 你肯能会怀疑会不会返回祖先节点的上面节点,不会的,
// 因为return root 是在最先找到祖先节点的那一层返回的。
}
};