两个节点的最近公共父节点

发布于 2023-05-27 10:04:40 字数 849 浏览 50 评论 0

两个节点的最近公共父节点指的是在一棵树中,这两个节点所在的子树的根节点。如果这两个节点本身就是父子关系,则它们的父节点就是它们的最近公共父节点。

在一棵树中,由于每个节点都只有一个父节点,可以通过递归遍历树的方式找到两个节点的最近公共父节点。

具体实现步骤如下:

  1. 如果当前节点是 null 或者等于p或者q,则返回当前节点。
  2. 递归遍历当前节点的左子树,如果返回值不为 null,则说明在左子树中找到了p或q中的一个节点。
  3. 递归遍历当前节点的右子树,如果返回值不为 null,则说明在右子树中找到了p或q中的一个节点。
  4. 如果p和q分别在当前节点的左子树和右子树中,则当前节点就是它们的最近公共父节点。

代码实现如下:

class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if (root == null || root == p || root == q) {
            return root;
        }
        TreeNode left = lowestCommonAncestor(root.left, p, q);
        TreeNode right = lowestCommonAncestor(root.right, p, q);
        if (left != null && right != null) {
            return root;
        }
        return left != null ? left : right;
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

花想c

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

金兰素衣

文章 0 评论 0

ゃ人海孤独症

文章 0 评论 0

一枫情书

文章 0 评论 0

清晰传感

文章 0 评论 0

mb_XvqQsWhl

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文