繁体   English   中英

如何在bst中迭代地找到两个节点之间的路径?

[英]How to find path between two nodes iteratively in bst?

假设这是节点 class。

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;
}

要在 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 的路径粘合在一起,以获得您想要的路径。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM