Python实现简单字典树的方法

1046次阅读  |  发布于5年以前

本文实例讲述了Python实现简单字典树的方法。分享给大家供大家参考,具体如下:


    #coding=utf8
    """代码实现了最简单的字典树,只支持由小写字母组成的字符串。
    在此代码基础上扩展一下,就可以实现比较复杂的字典树,比如带统计数的,或支持更多字符的字典树,
    或者是支持删除等操作。
    """
    class TrieNode(object):
      def __init__(self):
        # 是否构成一个完成的单词
        self.is_word = False
        self.children = [None] * 26
    class Trie(object):
      def __init__(self):
        self.root = TrieNode()
      def add(self, s):
        """Add a string to this trie."""
        p = self.root
        n = len(s)
        for i in range(n):
          if p.children[ord(s[i]) - ord('a')] is None:
            new_node = TrieNode()
            if i == n - 1:
              new_node.is_word = True
            p.children[ord(s[i]) - ord('a')] = new_node
            p = new_node
          else:
            p = p.children[ord(s[i]) - ord('a')]
            if i == n - 1:
              p.is_word = True
              return
      def search(self, s):
        """Judge whether s is in this trie."""
        p = self.root
        for c in s:
          p = p.children[ord(c) - ord('a')]
          if p is None:
            return False
        if p.is_word:
          return True
        else:
          return False
    if __name__ == '__main__':
      trie = Trie()
      trie.add('str')
      trie.add('acb')
      trie.add('acblde')
      print trie.search('acb')
      print trie.search('ac')
      trie.add('ac')
      print trie.search('ac')

更多关于Python相关内容可查看本站专题:《Python字典操作技巧汇总》、《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总

希望本文所述对大家Python程序设计有所帮助。

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8