Trie Tree

Trie Tree

#Trie Tree的基本特点
1)根节点不包含字符,除根节点外每个节点只包含一个字符
2)从根节点到某一个节点,路径上经过的字符连接起来,为该节点对应的字符串
3)每个节点的所有子节点包含的字符串不相同

原理图:


参考:
数据结构之Trie树
Trie Tree on Answers.com

#Trie Tree简单的Python实现
最近在学习Python,下面的代码就用来学习下语法了 :)

# coding:utf-8
'''
Created on 2011-6-14

@author: Dokie
'''
ALPHABET_SIZE 
=   26

class  Node:
    
    
def   __init__ (self, is_end  =  False):
        self.is_end 
=  is_end
        self.prefix_count 
=  0
        self.children 
=  [None  for  child  in  range(ALPHABET_SIZE)]

class  Trie:
    
def   __init__ (self):
        self.head 
=  Node()
        
    
def  insert(self, word):
        current 
=  self.head
        count 
=  0
        
for  letter  in  word:
            int_value 
=  ord(letter)  -  ord( ' a ' )
            
try :
                
assert  ( 0  <=  int_value  <=   26 )
            
except  Exception:
                
raise  Exception( " invalid Word " )
            
            
if  current.children[int_value]  is  None:
                current.children[int_value] 
=  Node()
                current 
=  current.children[int_value]
                count 
+=   1
                current.prefix_count 
=  count
        current.is_end 
=  True
        
    
def  search(self, word):
        
        current 
=  self.head
        
for  letter  in  word:
            int_value 
=  ord(letter)  -  ord( ' a ' )
            
try :
                
assert  (0  <=  int_value  <=   26 )
            
except  Exception:
                
return  False
            
if  current.children[int_value]  is  None:
                
return  False
            
else :
                current 
=  current.children[int_value]
                
            
return  current.is_end


        
        
         
    
def  count_words_with_prefix(self, word):
        current 
=  self.head
        
for  letter  in  word:
            int_value 
=  ord(letter)  -  ord( ' a ' )
            
try :
                
assert  (0  <=  int_value  <=   26 )
            
except  Exception:
                
return  None
            
if  current.children[int_value]  is  None:
                
return  None
            
else :
                current 
=   current.children[int_value]
        
return  current.prefix_count
                

        
if   __name__   ==   ' __main__ ' :
    
import  doctest
    doctest.testmod()
    t 
=  Trie()
    t.insert(
" apple " )
    t.insert(
" good " )
    
print  t.search( " apple " )
    
print  t.search( " fff " )
    
print  t.count_words_with_prefix( " apple " )

附:TrieMap Javap实现


你可能感兴趣的:(Trie Tree)