c - 一棵树在任何级别都有多个 child ,找到两个节点之间的路径

标签 c algorithm data-structures tree

<分区>

我们有一棵树,在给定的第 2 级节点上有尽可能多的 child ,我们必须找到两个节点之间的路径,我们该怎么做?

                1
      /         |        \
     2          3         4
    / \         |       /   \
   5   8       11      12    13
  /\                   |
 6  9                 14
 / \
7   10

我们必须找到节点 7 和 14 之间的路径。结果应该是:

7 -> 6 -> 5 -> 2 -> 1 -> 4 -> 12 -> 14

最佳答案

假设我们想要找到节点 A 和 B 之间的路径。

一种简单的方法是找到两个节点的最低共同祖先 (LCA)。蛮力方法是找到从根到 A 以及从根到 B 的路径(您可以使用广度优先或深度优先遍历来做到这一点)并将路径存储在列表中。遍历列表以查看最低的公共(public)节点,如果没有,它将是根本身。现在您有两条从节点 A 到 LCA 和从节点 B 到 LCA 的部分路径,连接这些路径以获得从 A 到 B 的路径。

如果树提供更多功能,如父指针或每个节点的级别数等,则可以更有效地完成。例如,如果存在父指针,您可以从单个节点开始向上移动到根节点,并在它们到达公共(public)节点时停止。

关于c - 一棵树在任何级别都有多个 child ,找到两个节点之间的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18689199/

相关文章:

algorithm - 是否有一种算法可以将受限输入与可能的输出相匹配?

c++ - 优先队列堆实现

c - 声明为 const,但定义为非常量,C

c - 如何测量对 10 个数字进行冒泡排序所花费的时间

c++ - 归并排序。使用迭代器实现

algorithm - 矩形项目的优化网格

javascript - 将 2 个数字组合起来用作对象的键的有效方法是什么?

仅当定义了值时才更新 Python 字典

Perl 中的并发输入和输出

c++ - 如何将 sscanf 的这种用法转换为 cin?