Python 实现获取二叉搜索树中两个指定节点的最近公共祖先
要解决获取二叉搜索树中两个指定节点的最近公共祖先这个问题,首先要了解二叉搜索树的性质,在二叉搜索树中,对于任意一个节点 N,其左子树中所有节点的值都小于 N 的值,而右子树中所有节点的值都大于 N 的值,这个性质能够在搜索过程中确定节点的位置。
因此,根据上述性质可以使用如下的规划步骤来解决获取二叉搜索树中两个指定节点的最近公共祖先的问题:
- 创建一个二叉搜索树类,该类拥有三个属性,分别是当前节点的值
val
、当前节点的左子节点left
和当前节点的右子节点right
。 - 创建一个辅助函数
lowestCommonAncestor
,该函数用于在给定的二叉搜索树中找到最近的公共祖先节点,函数接收三个参数,分别是当前搜索的节点root
以及待查找的两个节点p
和q
。 - 首先检查当前节点是否为空,若为空则返回
None
。 - 比较当前节点的值与
p
和q
的值:- 如果当前节点的值大于
p
和q
这两个节点的值,则说明这两个节点都在当前节点的左子树中,因此继续在左子树中搜索,递归调用lowestCommonAncestorHelper(root.left, p, q)
查找左子树并返回结果。 - 如果当前节点的值小于
p
和q
这两个节点的值,则说明这两个节点都在当前节点的右子树中,因此继续在右子树中搜索,递归调用lowestCommonAncestorHelper(root.right, p, q)
查找右子树并返回结果。 - 如果当前节点的值介于
p
和q
这两个节点的值之间,或者当前节点的值等于p
或q
这两个节点的值,说明当前节点就是最近公共祖先,直接返回当前节点。
- 如果当前节点的值大于
- 重复上述步骤,直到找到最近公共祖先为止。
使用上述步骤获取二叉搜索树中的最近公共祖先其时间复杂度是 O ( n ) O(n) O(n),其中