📜  数据结构|平衡二叉搜索树|问题4(1)

📅  最后修改于: 2023-12-03 15:10:20.157000             🧑  作者: Mango

平衡二叉搜索树问题4

什么是平衡二叉搜索树?

平衡二叉搜索树是一种能够自我平衡的二叉搜索树(BST)。平衡二叉搜索树的特点在于树中任何一个节点的两个子树的高度差不会超过1。

常见的平衡二叉搜索树有红黑树、AVL树等。

在插入或删除元素时,平衡二叉搜索树通过旋转操作来保持树的平衡。

问题4:寻找两个节点的最近公共祖先
问题描述

给定一个平衡二叉搜索树(BST),找到树中两个给定节点的最近公共祖先(LCA)。

代码实现

我们可以使用二叉搜索树的特性来解决这个问题。

如果节点p和节点q都大于当前节点的值,那么LCA应该在当前节点的右子树中。如果节点p和节点q都小于当前节点的值,那么LCA应该在当前节点的左子树中。如果其中一个节点等于当前节点的值,那么该节点就是LCA。

如果前三个条件都不符合,说明p和q分别在当前节点的左右两侧(不一定是左右子树),那么当前节点就是LCA。

代码如下:

class Solution:
    def lowestCommonAncestor(self, root: TreeNode, p: TreeNode, q: TreeNode) -> TreeNode:
        if not root:
            return None
        
        if p.val < root.val and q.val < root.val:
            return self.lowestCommonAncestor(root.left, p, q)
        elif p.val > root.val and q.val > root.val:
            return self.lowestCommonAncestor(root.right, p, q)
        else:
            return root
复杂度分析

时间复杂度:O(log n),其中 n 是平衡二叉搜索树的节点数。

空间复杂度:O(1)。我们只需要常量的空间存储若干变量。

总结

平衡二叉搜索树是一种非常有用的数据结构,可以快速地插入、删除、查找等操作。在解决某些问题时,平衡二叉搜索树可以发挥出很大的作用。

寻找两个节点的最近公共祖先是常见的问题之一,使用二叉搜索树的特性可以很轻松地解决这个问题。