用DFS
如果root->val等于o1或者o2,就返回o1或者o2。
如果左右子树一个返回o1一个返回o2,那就返回当前节点的val,因为这就是要找的节点。
如果左右子树中有某一个返回了不是-1也不是o1或o2,那就说明那底下有要找的节点,直接返回他返回的值。
如果都不是就返回-1。
class Solution {
public:
int dfs(TreeNode* root, int o1, int o2)
{
int left = -1, right = -1;
if(root->val == o1) return o1;
if(root->val == o2) return o2;
if(root->left)
left = dfs(root->left, o1, o2);
if(root->right)
right = dfs(root->right, o1, o2);
if(left == o1 && right == o2 || right == o1 && left == o2)
return root->val;
else if(left == o1 || right == o1)
return o1;
else if(left == o2 || right == o2)
return o2;
else
return left != -1 ? left : right;
}
int lowestCommonAncestor(TreeNode* root, int o1, int o2) {
return dfs(root, o1, o2);
}
};


京公网安备 11010502036488号