【问题标题】:Exploring a binary search tree探索二叉搜索树
【发布时间】:2013-04-27 04:06:47
【问题描述】:

我认为二叉搜索树是最简单的例子,但我真的想知道如何探索三叉搜索树或各种尝试。我对这些没有任何经验,但我了解添加和搜索它们的概念。

我的问题是,当我找到一个与我的输入匹配的节点(例如自动完成)时,我如何有效地收集所有子节点?

【问题讨论】:

    标签: data-structures autocomplete binary-tree trie ternary-search-tree


    【解决方案1】:

    这取决于您的搜索树的实现。如果获取特定节点的所有子节点是您需要执行的常见操作,则应使用使该操作高效的实现。

    例如,对于每个节点,您可以存储一个子数组,其中包含指向每个节点子节点的指针。

    【讨论】:

      【解决方案2】:

      对于一个 Trie,你应该有 Node 结构

      class Node  
      {
          char data;
          ArrayList<Node> children;
      
          public Node getChild(char data)
          {
              for(Node child : this.children)
                  if(child.data == data)
                     return child;
              return null;
          }
      }
      

      每个节点将包含一个字符及其子节点的列表
      所以你的搜索看起来像这样

      public boolean search(String s)
      {
          Node current = root;         // root is the Node present in Trie
          for(int i=0; i<s.length(); i++)
          {
             char c = s.charAt(i);
             Node n = current.getChild(c);
             if(n==null)
                 return false;   // Match not present
             current = n;
          }
          return true;       // Match found
      }
      

      上述搜索方法只是检查搜索的字符串是否存在于您的 trie 中。您可以调整它以根据您的要求收集所有孩子(这是为您保留的:))

      希望这对您有所帮助,并让您了解如何收集它。 如果在填充 trie 时需要任何帮助。让我们知道!

      注意 在 Trie 节点中,您还可以维护一个 boolean marker 来指示单词的结尾。根据您的应用和使用情况,您可以使用或不使用它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-08
        • 1970-01-01
        • 2010-10-26
        • 1970-01-01
        相关资源
        最近更新 更多