力扣小白刷题之235题二叉搜索树的最近公共祖先
题目描述
找到一个二叉搜索树中两个指定节点的最近公共祖先。
最近公共祖先定义:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
思路
根据二叉搜索树的特性:
- 如果根节点的值同时大于 p 和 q 节点的值,说明 p 和 q 都在左子树上,所以就继续递归左子树。
- 如果根节点的值同时小于 p 和 q 节点的值,说明 p 和 q 都在右子树上,所以就继续递归右子树。
- 否则的话,就说明根节点位于 p 和 q 之间 是它们的公共祖先,返回即可。
代码
时间复杂度 O(N) ,其中 N 为BST中节点的个数,在最坏的情况下,我们可能需要访问BST中所有的节点。
空间复杂度 O(N),所需开辟的额外空间主要是递归栈产生的,之所以是 N 是因为 BST 的高度为 N。
递归每级都需要return