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

题目链接: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

}
posted @   小星code  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示