Skip to content

Instantly share code, notes, and snippets.

@Mirey-zz
Last active August 29, 2015 14:07
Show Gist options
  • Save Mirey-zz/af4c19b649851ee0af6d to your computer and use it in GitHub Desktop.
Save Mirey-zz/af4c19b649851ee0af6d to your computer and use it in GitHub Desktop.
class Node(object):
def __init__(s):
s.edges = {}
s.term = False
def insert(s, w):
s.term = not w or s.edges.setdefault(w[0], Node()).insert(w[1:]) or s.term
def exists(s, w):
return s.term if not w else w[0] in s.edges and s.edges[w[0]].exists(w[1:])
def remove(s, w):
if w:
s.edges[w[0]].remove(w[1:])
else:
s.term = False
def prune(s):
s.edges = {e:n for e,n in s.edges.iteritems() if n.prune() or n.edges or n.term}
def display(s, level=0):
for edge, node in s.edges.iteritems():
print ' |'*level + ' +-', edge, node.term
node.display(level+1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment