二叉树的最低共同祖先(不是二叉搜索树)

2024-03-11

我尝试使用 Tarjan 算法和网站上的一种算法来解决这个问题:http://discuss.techinterview.org/default.asp?interview.11.532716.6 http://discuss.techinterview.org/default.asp?interview.11.532716.6,但没有一个是明确的。也许我的递归概念没有正确建立。请用小示范来解释以上两个例子。我对 Union Find 数据结构有一个想法。

这看起来很有趣的问题。所以无论如何都必须解码这个问题。准备面试。

如果存在任何其他逻辑/算法,请分享。


LCA 算法尝试做一件简单的事情:找出从两个相关节点到根的路径。现在,这两条路径将具有公共后缀(假设路径在根处结束)。 LCA 是后缀开始的第一个节点。

考虑下面的树:

              r * 
               / \
            s *   *
             / \
          u *   * t
           /   / \
          * v *   *
             / \
            *   *

为了找到 LCA(u, v),我们按如下步骤进行:

  • 从 u 到 root 的路径: Path(u, r) = usr
  • 从 v 到根的路径: Path(v, r) = vtsr

现在,我们检查常见后缀:

  • 常见后缀:'sr'
  • 因此 LCA(u, v) = 后缀的第一个节点 = s

注意实际的算法do not一直到根。他们使用不相交集数据结构在到达 s 时停止。

解释了一组优秀的替代方法.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

二叉树的最低共同祖先(不是二叉搜索树) 的相关文章

随机推荐