思路
首先思考:先找两个叶子节点后再去找公共祖先,因此要使用后序遍历。递归函数找到节点返回该节点,找不到返回空。注意递归逻辑中的四个逻辑判断。
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if (root == q || root == p || root == nullptr) return root;
TreeNode* left = lowestCommonAncestor(root->left, p, q);
TreeNode* right = lowestCommonAncestor(root->right, p, q);
if (left != nullptr && right != nullptr) return root;
if (left == nullptr && right == nullptr) return nullptr;
if (left == nullptr && right != nullptr) return right;
else return left;
}
};