Skip to content

Instantly share code, notes, and snippets.

@eric-vader
Last active August 29, 2015 14:21
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eric-vader/14bf21e958676d171d4c to your computer and use it in GitHub Desktop.
Save eric-vader/14bf21e958676d171d4c to your computer and use it in GitHub Desktop.
PrintTree
class Node(object):
def __init__(self, value, left=None, right=None):
self.value = value
self.left = left
self.right = right
def printTree(rootNode):
printTreeInternal([rootNode], 1, maxLevel(rootNode))
def printWhitespaces(count):
whitesp = ""
for i in range(count):
whitesp += " "
return whitesp
def maxLevel(node):
if node is None:
return 0
else:
return max(maxLevel(node.left), maxLevel(node.right))+1
def isAllElementsNull(list):
for ea in list:
if not(ea == None):
return False
return True
def printTreeInternal(nodeList, level, maxLevel):
if (not nodeList) or (isAllElementsNull(nodeList)):
return
floor = maxLevel - level
endgeLines = 2 ** max(floor - 1, 0)
firstSpaces = (2 ** floor) - 1;
betweenSpaces = (2 ** (floor + 1)) - 1;
buffer = printWhitespaces(firstSpaces)
nodeListNextLevel = []
for node in nodeList:
if (not (node is None)):
buffer += str(node.value)
nodeListNextLevel.append(node.left)
nodeListNextLevel.append(node.right)
else:
nodeListNextLevel.append(None)
nodeListNextLevel.append(None)
buffer += " "
buffer += printWhitespaces(betweenSpaces)
print buffer
buffer = ""
for i in range(1, endgeLines+1):
for j in range(len(nodeList)):
buffer += printWhitespaces(firstSpaces - i)
if nodeList[j] == None:
buffer += printWhitespaces(endgeLines + endgeLines + i + 1)
continue
if not (nodeList[j].left == None):
buffer += "/"
else:
buffer += printWhitespaces(1);
buffer += printWhitespaces(i + i - 1);
if not (nodeList[j].right == None):
buffer += "\\"
else:
buffer += printWhitespaces(1)
buffer += printWhitespaces(endgeLines + endgeLines - i)
print buffer
buffer = ""
printTreeInternal(nodeListNextLevel, level + 1, maxLevel)
t = Node('*',
Node('+',
Node(4), Node(5)
),
Node('-', Node(5), Node(6))
)
q = Node('+',
Node('-',
Node(2),
Node('+', Node(5), Node(8))
),
Node('-', Node(8), Node('*', Node(4), Node(7)))
)
d = Node(6,
Node(2,
Node(1),
Node(4, Node(3), Node(5))
),
Node(7, Node(8), Node(10, Node(9), Node(11)))
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment