1. 首页
  2. 剑指offer经典面试题

[剑指 Offer 第 2 版第 68 题] “树中两个节点的最近公共祖先”做题记录

[剑指 Offer 第 2 版第 68 题] “树中两个节点的最近公共祖先”做题记录

第 68 题:树中两个节点的最近公共祖先

传送门:树中两个结点的最低公共祖先

给出一个二叉树,输入两个树节点,求它们的最低公共祖先。

一个树节点的祖先节点包括它本身。

注意:

  • 输入的二叉树不为空;
  • 输入的两个节点一定不为空,且是二叉树中的节点;

样例:

二叉树 [8, 12, 2, null, null, 6, 4, null, null, null, null] 如下图所示: 8 / \ 12 2 / \ 6 4 1. 如果输入的树节点为 2 和 12,则输出的最低公共祖先为树节点 8 。

  1. 如果输入的树节点为 2 和 6 ,则输出的最低公共祖先为树节点 2 。

同 LeetCode 第 236 题:二叉树的最近公共祖先。

传送门:236. 二叉树的最近公共祖先

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

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

例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]

liwei20191011114_1.png

示例 1:

输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1 输出: 3 解释: 节点 5 和节点 1 的最近公共祖先是节点 3。

示例 2:

输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4 输出: 5 解释: 节点 5 和节点 4 的最近公共祖先是节点 5。因为根据定义最近公共祖先节点可以为节点本身。

说明:

  • 所有节点的值都是唯一的。
  • p、q 为不同节点且均存在于给定的二叉树中。

分析:1、如果有指向父结点的指针;2、没有指向父结点的指针。

liwei201910119_2.png

liwei201910113_3.png

Python 代码:

  class Solution(object):
        def lowestCommonAncestor(self, root, p, q):
            """
            :type root: TreeNode
            :type p: TreeNode
            :type q: TreeNode
            :rtype: TreeNode
            """

            if root is None:
                return None
            if root == p or root == q:
                return root
            left = self.lowestCommonAncestor(root.left, p, q)
            right = self.lowestCommonAncestor(root.right, p, q)
            if left and right:
                return root
            if left is None:
                return right
            if right is None:
                return left
            return None

Java 代码:

liwei20191018_4.png

作者:liweiwei1419

来源:https://liweiwei1419.github.io/sword-for-offer/


看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「方志朋」,公众号后台回复「666」 免费领取我精心整理的进阶资源教程
  4. JS中文网,Javascriptc中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,是给开发者用的 Hacker News,技术文章由为你筛选出最优质的干货,其中包括:Android、iOS、前端、后端等方面的内容。目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。

    本文著作权归作者所有,如若转载,请注明出处

    转载请注明:文章转载自「 Java极客技术学习 」https://www.javajike.com

    标题:[剑指 Offer 第 2 版第 68 题] “树中两个节点的最近公共祖先”做题记录

    链接:https://www.javajike.com/article/3307.html

« [剑指 Offer 第 2 版第 67 题] “把字符串转换成整数”做题记录
[剑指 Offer 第 2 版第 9-1 题] “用两个栈实现队列”做题记录»

相关推荐

QR code