Skip to content

Instantly share code, notes, and snippets.

@ritsz
Last active August 29, 2015 14:09
Show Gist options
  • Select an option

  • Save ritsz/4c60500a8a01acc44888 to your computer and use it in GitHub Desktop.

Select an option

Save ritsz/4c60500a8a01acc44888 to your computer and use it in GitHub Desktop.
class Tree :
def __init__(self, data = None):
self._data = data
self._HD = 0
self._left = None
self._right = None
def show(self):
return self._data
def left(self):
return self._left
def right(self):
return self._right
def put(self, data):
self._data = data
def tree_show(temp):
if temp == None:
return
else:
tree_show(temp.left())
print(temp.show(), temp._HD)
tree_show(temp.right())
def level_traversal(root):
queue = []
temp = root
while temp != None:
if temp.left() != None:
queue.append(temp.left())
if temp.right() != None:
queue.append(temp.right())
yield temp # Generators. Thus this function can be iterated over by for loops
try:
temp = queue.pop(0)
except IndexError:
temp = None
print("Done\n")
return
def calculate_HD(root, value):
if root == None:
return
else:
root._HD = value
calculate_HD(root.left(), value - 1)
calculate_HD(root.right(), value + 1)
root = Tree(1)
root._left = Tree(2)
root._right = Tree(3)
root._left._right = Tree(4)
root._left._right._right = Tree(5)
root._left._right._right._right = Tree(6)
top_view = dict()
calculate_HD(root, 0)
for node in level_traversal(root):
if node._HD in top_view.keys(): # IF a value for that HD is already there, IGNORE
continue
else:
top_view[node._HD] = node.show()
for key in sorted(top_view):
print(top_view[key])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment