问题描述:首先定义一个术语 LCA(Lowest Common Ancestor):设 T 为一棵树,n1 和 n2 都存在于 T 中,n1 和 n2 的 LCA 为离它们两最近的共同祖先(一个节点的祖先可以是它自己)。n1 和 n2 的最近共同祖先,也是它们的共同祖先中,离树根最远的那个节点。如下图是一棵二叉树
图中,10 和 14 的 LCA 是 12,8 和 14 的 LCA 是 8。
两节点的 LCA 是非常有用的,例如两节点 n1 和 n2 的距离,等于根节点到 n1 的距离加上等于根节点到 n2 的距离,减去它们的根节点到它两的最近共同祖先(LCA)节点距离的两倍。
现给定一棵 BST,求 BST 上两节点 n1、n2 的 LCA。
解:如果给定的 BST 的每个节点都有指向其双亲的指针,那么两节点的 LCA 就很容易找到了,只要我们让两节点向根节点方向遍历,它们第一次相遇的节点即为它们的 LCA。
在节点没有双亲指针的情况下,我们可以利用 BST 的特性,