LeetCode 236
https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/description/
难度:中等
二叉树题目。如果当前节点为空,或者为 p,或者为 q,直接返回当前节点。
如果左右子树都找到 p 或 q,返回当前节点。
如果左子树找到 p 和 q,返回左子树的结果。
如果右子树找到 p 和 q,返回右子树的结果。
如果左右子树都没找到,返回空节点。
时间复杂度:O(n),其中 n 为二叉树的节点个数。
空间复杂度:O(n)。最坏情况下,二叉树是一条链,因此递归需要 O(n) 的栈空间。
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if (root == nullptr || root == p || root == q) {
return root;
}
TreeNode* left = lowestCommonAncestor(root->left, p, q);
TreeNode* right = lowestCommonAncestor(root->right, p, q);
if (left && right) { // 左右都找到
return root; // 当前节点是最近公共祖先
}
return left ? left : right;
}
};