# -*- coding: utf8 -*- import os, sys, math, copy class node: value = 0 id = 0 parent_left = None parent_right = None bit = 0 def __init__( self, id, value, left=None, right=None ): self.id = id self.value = value self.parent_left = left self.parent_right = right if right is not None: right.bit = 1 def __repr__( self ): return ""%( self.id, self.bit, self.value ) def __cmp__( self, node2 ): if self.value < node2.value: return -1 elif self.value == node2.value: return -1 else: return 1 class tree: def __init__( self, sequence ): self.seq = sequence self.head = [] self.tree = [] self.size = 0 for item in sequence: self.head.append( node( item[0], item[1] ) ) self.size += item[1] value = 0 while value < self.size: self.head.sort() value = self.head[0].value+self.head[1].value if value < self.size: self.head[0] = node( 0, value, self.head[0], self.head[1] ) del self.head[1] else: self.begin = node( 0, value, self.head[-1], self.head[-2] ) if __name__ == "__main__": seq = [ ( "A", 8 ), ("B", 7 ), ("C", 12 ), ("D", 9 ), ("E", 15) ] t = tree( seq ) print t.begin.parent_left.parent_left.parent_right