当前位置:   article > 正文

Day 21 二叉树part07: 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先

Day 21 二叉树part07: 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先

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

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

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

示例 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因为根据定义最近公共祖先节点可以为节点本身。

示例 3:

输入:root = [1,2], p = 1, q = 2
输出:1

提示:

  • 树中节点数目在范围 [2, 105] 内。
  • -109 <= Node.val <= 109
  • 所有 Node.val 互不相同 。
  • p != q
  • p 和 q 均存在于给定的二叉树中。
  1. # Definition for a binary tree node.
  2. # class TreeNode(object):
  3. # def __init__(self, x):
  4. # self.val = x
  5. # self.left = None
  6. # self.right = None
  7. class Solution(object):
  8. def lowestCommonAncestor(self, root, p, q):
  9. """
  10. :type root: TreeNode
  11. :type p: TreeNode
  12. :type q: TreeNode
  13. :rtype: TreeNode
  14. time: O(n)
  15. space: 空间复杂度主要由递归栈决定。 O(n) / 完全平衡的 O(logn)
  16. """
  17. # 如果当前节点为空或者等于p或q,则直接返回
  18. if not root or root == p or root == q:
  19. return root
  20. # 在左子树和右子树中分别查找
  21. left = self.lowestCommonAncestor(root.left, p, q)
  22. right = self.lowestCommonAncestor(root.right, p, q)
  23. # 如果左子树和右子树都找到了节点,说明当前节点是最近公共祖先
  24. if left and right:
  25. return root
  26. # 如果只在左子树或者右子树中找到了节点,返回找到的节点
  27. if not left:
  28. return right
  29. return left

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/430013
推荐阅读
相关标签
  

闽ICP备14008679号