236. 二叉树的最近公共祖先 c++

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)

知识点及反思

你可能感兴趣的:(剑指offer,leetcode,二叉树,数据结构,算法,leetcode,面试)