################################################## # SPYCE - Python-based HTML Scripting # Copyright (c) 2002 Rimon Barr. # # Refer to spyce.py # CVS: $Id: tree.py 235 2002-11-14 11:48:25Z batripler $ ################################################## import string class tree: def __init__(self, data): self.data = data self.parent = None self.children = [] self.next = self.prev = None self.depth = 0 def append(self, data): node = tree(data) self.children.append(node) node.parent = self node.depth = self.depth+1 return node def delete(self): for c in self.children: c.delete() if self.parent: self.parent.children.remove(self) self.parent = None def __repr__(self): return '%s [%s]' % (self.data, string.join(map(str, self.children),', ')) def postWalk(self, f): for c in self.children: c.postWalk(f) f(self) def preWalk(self, f): f(self) for c in self.children: c.preWalk(f) def computePreChain(self): prev = [None] def walker(node, prev=prev): node.prev = prev[0] if prev[0]: node.prev.next = node prev[0] = node self.preWalk(walker) def __cmp__(self, o): try: x = not self.data == o.data if x: return x x = not self.children == o.children if x: return x except: return 1 return 0 if __name__=='__main__': root = tree('1') n = root.append('1.1') n.append('1.1.1') n = root.append('1.2') n.append('1.2.1') root.computePreChain() n = root while(n): print n.data n = n.next root.delete()