📌 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。
二叉搜索树的定义:
- 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
- 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
- 它的左、右子树也分别为二叉排序树。
在此题目中,会提供 p, q 2个节点,我们需要确定这两个节点的公共祖先。
首先我们知道,根节点肯定是所有节点的祖先,其次根据二叉搜索树的特性,当我们将 p 和 q 分别与根节点做对比的时候,可以排除掉一半的值,因为左边的节点肯定小于右边的节点,当 p 大于根节点,那我们需要找的那个公共祖先肯定在右半部分子树。
还有一种特殊情况需要考虑,那就是 p 或者 q 于根节点是相等的,这时候公共祖先其实就是根节点了。
1 | class Solution: |