• 递归
  • 如果当前节点值等于o1或者o2,返回当前节点;
  • 如果当前节点的左右子节点都有返回值,则当前节点为公共祖先;
  • 如果只有一个子节点有返回值,则返回该值;
  • 如果节点为空,返回NULL。
/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @param o1 int整型 
     * @param o2 int整型 
     * @return int整型
     */
    TreeNode* dfs(TreeNode* root, int o1, int o2) {
        if (root == NULL || root->val == o1 || root->val == o2) return root;
        TreeNode* left = dfs(root->left, o1, o2);
        TreeNode* right = dfs(root->right, o1, o2);
        if (left != NULL && right != NULL) return root;
        return left != NULL ? left : right;
    }
    int lowestCommonAncestor(TreeNode* root, int o1, int o2) {
        // write code here
        return dfs(root, o1, o2)->val;
    }
};