Если подсказок Роберта недостаточно, вот минимальная реализация Trie с двумя функциями, с которыми у вас возникли проблемы.
class Trie(object):
def __init__(self, char='', data=None):
self.children = []
self.char = char
self.data = data
def get_child(self, char):
for child in self.children:
if child.char == char:
return child
def insert(self, key, data, node=None):
if node is None:
node = self
if len(key) == 0:
#key found
node.data = data
return node.data
else:
child = node.get_child(key[0])
if child is None:
child = Trie(key[0])
node.children.append(child)
return self.insert(key[1:], data, child)
return self.insert(key[1:], data, child)
def find(self, key, node=None):
if node is None:
node = self
if len(key) == 0:
#key found
return node.data
else:
child = node.get_child(key[0])
if child is None:
return None
return self.find(key[1:], child)
>>> tree = Trie()
>>> tree.insert('t', 't data')
>>> tree.insert('tr', 'tr data')
>>> print tree.find('t'), tree.find('tr')
t data tr data