0%

# Leetcode 236 二叉树的最近公共祖先(Lowest Common Ancestor of a Binary Tree) 题解分析

Posted on 2021-05-23 In Java , leetcode , Lowest Common Ancestor of a Binary Tree Views: Views: Disqus:

### 题目介绍

Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree.

According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes `p` and `q` as the lowest node in `T` that has both `p` and `q` as descendants (where we allow a node to be a descendant of itself).”

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

百度百科中最近公共祖先的定义为：“对于有根树 `T` 的两个节点 `p`、`q`，最近公共祖先表示为一个节点 `x`，满足 `x` 是 `p`、`q` 的祖先且 `x` 的深度尽可能大（一个节点也可以是它自己的祖先）。”

## 代码

    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
            // 如果当前节点就是 p 或者是 q 的时候，就直接返回了
            // 当没找到，即 root == null 的时候也会返回 null，这是个重要的点
            if (root == null || root == p || root == q) return root;
            // 在左子树中找 p 和 q
            TreeNode left = lowestCommonAncestor(root.left, p, q);
            // 在右子树中找 p 和 q
            TreeNode right = lowestCommonAncestor(root.right, p, q);
            // 当左边是 null 就直接返回右子树，但是这里不表示右边不是 null，所以这个顺序是不影响的
            // 考虑一种情况，如果一个节点的左右子树都是 null，那么其实对于这个节点来说首先两个子树分别调用
            // lowestCommonAncestor会在开头就返回 null，那么就是上面 left 跟 right 都是 null，然后走下面的判断的时候
            // 其实第一个 if 就返回了 null，如此递归返回就能达到当子树中没有找到 p 或者 q 的时候只返回 null
            if (left == null) {
                return right;
            } else if (right == null) {
                return left;
            } else {
                return root;
            }
    //        if (right == null) {
    //            return left;
    //        } else if (left == null) {
    //            return right;
    //        } else {
    //            return root;
    //        }
    //        return left == null ? right : right == null ? left : root;
        }

Related Posts

- Leetcode 48 旋转图像(Rotate Image) 题解分析
- Leetcode 104 二叉树的最大深度(Maximum Depth of Binary Tree) 题解分析
- Leetcode 121 买卖股票的最佳时机(Best Time to Buy and Sell Stock) 题解分析
- Leetcode 105 从前序与中序遍历序列构造二叉树(Construct Binary Tree from Preorder and Inorder Traversal) 题解分析
- Leetcode 2 Add Two Numbers 题解分析

请我喝杯咖啡

WeChat Pay

Alipay

- Post author: Nicksxs
- Post link: https://nicksxs.me/2021/05/23/Leetcode-236-二叉树的最近公共祖先-Lowest-Common-Ancestor-of-a-Binary-Tree-题解分析/
- Copyright Notice: All articles in this blog are licensed under BY-NC-SA unless stating additionally.