/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @param o1 int整型
* @param o2 int整型
* @return int整型
*/
bool isExistLeft(TreeNode* root, int o1)
{
if (!root) {
return false;
}
if (root->val == o1) {
return true;
}
return isExistLeft(root->left, o1) || isExistLeft(root->right, o1);
}
int lowestCommonAncestor(TreeNode* root, int o1, int o2) {
if(!root) {
return 0;
}
// 如果root等于其中的一个值,返回root
if (root->val == o1 || root->val == o2) {
return root->val;
}
// 如果一个在左一个在右,返回root
if ((isExistLeft(root->left, o1) && !isExistLeft(root->left, o2)) || (!isExistLeft(root->left, o1) && isExistLeft(root->left, o2))) {
return root->val;
}
// 如果两个都是左,递归左子树
if (isExistLeft(root->left, o1) && isExistLeft(root->left, o2)) {
return lowestCommonAncestor(root->left, o1, o2);
}
// 如果两个都是右,递归右子树
return lowestCommonAncestor(root->right, o1, o2);
// write code here
}
};