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

发布时间 2023-07-04 19:51:55作者: 小星code

题目链接:LeetCode 236. 二叉树的最近公共祖先

题意:

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

解题思路:

  • 利用二叉树的后序遍历回溯(从下往上遍历)的思想,依次遍历整个二叉树,
  • 在遍历过程中,遇到 P 就返回p的父节点,遇到 q 就返回 q 的父节点,(也就是找到了p,q各自的祖先)
  • 然后判断:
  • 情况一:公共祖先是 p 或 q,此时直接返回该节点
  • 情况二:常规的公共祖先,此时左右子树如果都有,就返回根节点,否则返回存在的子树(左右子树均为空的情况就是返回空。)

代码:

// 递归的参数和返回值
func lowestCommonAncestor(root, p, q *TreeNode) *TreeNode {

    if root == nil {
        return nil
    } 
    // 递归的边界
    if root == p || root == q ||root == nil{  //找到p,q 节点就返回
        return root
    }

    left := lowestCommonAncestor(root.Left,p,q)
    right := lowestCommonAncestor(root.Right,p,q)

    // 单层递归的逻辑
    if left != nil && right != nil {
        return root
    }
    if left != nil{
        return left
    } 
    return right

}