gpt4 book ai didi

c - 二叉树的最低公共(public)祖先(不是二叉搜索树)

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:25:48 26 4
gpt4 key购买 nike

我尝试使用 Tarjan 的算法和网站上的一种算法解决问题: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到root的路径:Path(v, r) = vtsr

现在,我们检查公共(public)后缀:

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

请注意实际算法不会一直到根。他们使用 Disjoint-Set 数据结构在到达 s 时停止。

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

关于c - 二叉树的最低公共(public)祖先(不是二叉搜索树),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3540622/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com