236. 二叉树的最近公共祖先
写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点
1.递归 2
- 后序遍历,思路就是递归遍历,首先我们只有两种情况,一种是在同一个子树上,那么我们就返回其中的和p和q想等的那一个值,如果是不在同一子树,那么我们就返回left和right的上一子树
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if(root == NULL)
return NULL;
if(root == p || root == q)
return root;//截止条件,遍历到这截止即可
TreeNode* left = lowestCommonAncestor(root->left, p, q);
TreeNode* right = lowestCommonAncestor(root->right, p, q);
if(left == NULL)
return right;
if(right == NULL)
return left;
if(left && right) // p和q在两侧
return root;
return NULL; // 必须有返回值
}
};
时间复杂度/空间复杂度分析/面试场景如何作答
方法一的
- 时间复杂度:O(n)
- 空间复杂度: 空间复杂度为O(1)