1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
| class Node(object): def __init__(self,value): self.value = value self.left = None self.right = None
class BinaryTree(object): def __init__(self): print "Creating tree" self.root = None self.nodeCount = 0 def addValue(self, value): self.root = self.__addValue(self.root,value) def __addValue(self,node,value): if node == None: self.nodeCount = self.nodeCount +1 return Node(value) elif value > node.value: node.right = self.__addValue(node.right, value) elif value < node.value: node.left = self.__addValue(node.left,value) return node def addValues(self,valuesList): for val in valuesList: self.__addValue(self.root,val) def inOrderPrint(self): self.__inOrderPrint(self.root)
def __inOrderPrint(self,node): if node == None: return else: self.__inOrderPrint(node.left) print node.value, self.__inOrderPrint(node.right)
def printPreorder(self): if self.root == None: print "Empty Tree" return stack = [self.root] while stack != []: curr = stack.pop() print curr.value if curr.right != None: stack.append(curr.right) if curr.left != None: stack.append(curr.left)
def printPostOrder(self): if self.root == None: print "Empty Tree" return explored = [] frontier = [self.root] while frontier != []: curr = frontier.pop() if curr.left == None and curr.right == None: print curr.value continue if explored.count(curr) != 0: print curr.value continue frontier.append(curr) explored.append(curr) if curr.right != None: frontier.append(curr.right) if curr.left != None: frontier.append(curr.left)
def printInLevels(self): if self.root == None: print "Empty Tree" return currLevel = [self.root] nextLevel = [] level = 0 while currLevel != []: print "level: " + str(level) level += 1 while currLevel != []: curr = currLevel.pop(0) print curr.value, if curr.left != None : nextLevel.append(curr.left) if curr.right != None: nextLevel.append(curr.right) currLevel = nextLevel nextLevel = []
tree = BinaryTree() tree.addValue(5) tree.addValue(1) tree.addValue(8) tree.addValues([3,44,5,1,-2,4,23,4,0,-12]) tree.inOrderPrint() tree.printInLevels() tree.printPreorder() tree.printPostOrder()
otherTree = BinaryTree() otherTree.inOrderPrint() otherTree.printInLevels() |