【问题标题】:How to find path between two nodes iteratively in bst?如何在bst中迭代地找到两个节点之间的路径?
【发布时间】:2021-07-30 11:26:03
【问题描述】:

假设这是节点类。

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

【问题讨论】:

  • 递归可以转化为迭代,如果你展示你的代码也许我们可以帮忙
  • @largest_prime_is_463035818,嗨,你想让我给你看哪一部分?它更像是如何在两个节点之间找到路径的想法。
  • “任何建议”太模糊了。你尝试了什么?你在哪里卡住了?如果你能想出一个递归方法,那就先写吧。
  • @largest_prime_is_463035818,我相信您可以在线阅读大部分递归内容。好的,我遇到的问题是我不确定如何迭代地打印从节点到 b 节点的路径,因为它是迭代过程。
  • 您的find_path 有很多对未声明变量/属性的引用。此外,当您不是通过键搜索而是通过字符串搜索时,您拥有 BST 有什么相关性?关键信息似乎与这个问题无关,因此您是否拥有 BST 也无关紧要。

标签: c++ linked-list binary-search-tree


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    相关资源
    最近更新 更多