在任何级别具有多个子节点的树,找到两个节点之间的路径

时间:2013-09-08 22:19:35

标签: c algorithm data-structures tree

我们有一个树,在任何级别都有2个节点的子节点,我们必须找到两个节点之间的路径,我们怎么能这样做?

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

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

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

1 个答案:

答案 0 :(得分:4)

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

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

如果树提供更多功能,如父指针或每个节点的级别编号等,则可以更有效地完成。例如,如果存在父指针,则可以从单个节点向上移动到root并在到达公共节点时停止。