首页 > 解决方案 > 如何在bst中迭代地找到两个节点之间的路径?

问题描述

假设这是节点类。

class Node{
      string name;
      int key; // the value to determine where to go left or right
      Node* lChild;
      Node* rChild;
}

我知道如何递归查找。但是,您对如何迭代地找到两个节点之间的路径有什么建议吗?

vector<string> find_path(string a, string b){
    vector<string> tmp;
    Node* head_node = head;
   
    return tmp;
}

标签: c++linked-listbinary-search-tree

解决方案


要在 BST 中找到持有键 x 和 y 的节点之间的路径,可以使用以下过程:

  1. 沿着树向下走,搜索 x 和 y,直到 (1) 遇到 x,(2) 遇到 y,或 (3) 遇到 x 在一侧而 y 在另一侧的节点。
  2. 如果您在上一步中找到了 x 或 y,只需沿着树向下搜索另一个,写下您遇到的节点序列,然后返回该序列。
  3. 否则,假设您停在 x 和 y 位于相反两侧的节点 z。从 z 走到 x 再从 z 走到 y,像你一样写下路径。然后,将从 x 到 z 的路径和从 z 到 y 的路径粘合在一起,以获得您想要的路径。

这种方法可以迭代地完成——你只需要在写下你所走的路径时迭代地下降一棵树的能力。


推荐阅读