/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ class Solution { public: /** * * @param root TreeNode类 * @param o1 int整型 * @param o2 int整型 * @return int整型 */ int lowestCommonAncestor(TreeNode* root, int o1, int o2) { // write code here if(root == NULL) // 遍历到底了,此路径不存在o1或者o2 return -1; // 如果遍历到的节点的值和o1或者o2相等 // 返回节点的值 if(o1 == root->val || o2 == root->val) return root->val; // 遍历左子树 int left = lowestCommonAncestor(root->left, o1, o2); // 遍历右子树 int right = lowestCommonAncestor(root->right, o1, o2); // left == -1 证明左子树中不存在o1或者o2,那么o1和o2必然存在于右子树中 if(left == -1) return right; // 同理left==-1 if(right == -1) return left; return root->val; } };