1. TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
    2. if (!root || root == p || root == q) return root;
    3. TreeNode *left = lowestCommonAncestor(root->left, p, q);
    4. TreeNode *right = lowestCommonAncestor(root->right, p, q);
    5. if (left && right) return root;
    6. return left ? left : right;
    7. }