Advertisement
mgaikema

binary tree

Jul 23rd, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.54 KB | None | 0 0
  1. # Modified version of the code found here:
  2. # http://bit.ly/2tBY3RY
  3. class Node:
  4.     def __init__(self, val):
  5.         self.l = None
  6.         self.r = None
  7.         self.v = val
  8.  
  9. class Tree:
  10.     def __init__(self):
  11.         self.root = None
  12.  
  13.     def getRoot(self):
  14.         return self.root
  15.  
  16.     def add(self, val):
  17.         if(self.root == None):
  18.             self.root = Node(val)
  19.         else:
  20.             self._add(val, self.root)
  21.  
  22.     def _add(self, val, node):
  23.         if(val < node.v):
  24.             if(node.l != None):
  25.                 self._add(val, node.l)
  26.             else:
  27.                 node.l = Node(val)
  28.         else:
  29.             if(node.r != None):
  30.                 self._add(val, node.r)
  31.             else:
  32.                 node.r = Node(val)
  33.  
  34.     # Inorder
  35.     def printTree(self):
  36.         if(self.root != None):
  37.             self._printTree(self.root)
  38.  
  39.     def _printTree(self, node):
  40.         if(node != None):
  41.             self._printTree(node.l)
  42.             print str(node.v) + ' '
  43.             self._printTree(node.r)
  44.  
  45.     def postOrder(self):
  46.         if self.root is not None:
  47.             self._postOrder(self.root)
  48.  
  49.     def _postOrder(self, node):
  50.         if node is not None:
  51.             self._postOrder(node.l)
  52.             self._postOrder(node.r)
  53.             print str(node.v) + ' '
  54.    
  55.     def relable(self, h):
  56.         hh = get_max_node(h)
  57.         if self.root is not None:
  58.             self._relable(self.root, hh)
  59.  
  60.     def _relable(self, node, h):
  61.         if node is not None:
  62.             self._relable(node.l, h-2)
  63.             self._relable(node.r, h-1)
  64.             node = Node(h)
  65.  
  66.  
  67. def get_max_node(h):
  68.     return 2**(h)-1
  69.  
  70. def answer(h, q):
  71.     max = get_max_node(h)
  72.     tree = Tree()
  73.     for i in range(1, max+1):
  74.         tree.add(i)
  75.     #tree.printTree()
  76.     return tree
  77.        
  78. tree = answer(3, [1, 4, 7])
  79. #tree.printTree()
  80. tree.relable(3)
  81. tree.postOrder()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement