In this exercise we develop a method to reconstruct a binary
Solution
ListBinaryTree.py
class ListBinaryTree:
\"\"\"A binary tree class with nodes as lists.\"\"\"
DATA = 0 # just some constants for readability
LEFT = 1
RIGHT = 2
def __init__(self, root_value, left=None, right=None):
\"\"\"Create a binary tree with a given root value
left, right the left, right subtrees
\"\"\"
self.node = [root_value, left, right]
def create_tree(self, a_list):
return ListBinaryTree(a_list[0], a_list[1], a_list[2])
def insert_left(self, value):
\"\"\"Inserts value to the left of this node.
Pushes any existing left subtree down as the left child of the new node.
\"\"\"
self.node[self.LEFT] = ListBinaryTree(value, self.node[self.LEFT], None)
def insert_right(self, value):
\"\"\"Inserts value to the right of this node.
Pushes any existing left subtree down as the left child of the new node.
\"\"\"
self.node[self.RIGHT] = ListBinaryTree(value, None, self.node[self.RIGHT])
def insert_tree_left(self, tree):
\"\"\"Inserts new left subtree of current node\"\"\"
self.node[self.LEFT] = tree
def insert_tree_right(self, tree):
\"\"\"Inserts new left subtree of current node\"\"\"
self.node[self.RIGHT] = tree
def set_value(self, new_value):
\"\"\"Sets the value of the node.\"\"\"
self.node[self.DATA] = new_value
def get_value(self):
\"\"\"Gets the value of the node.\"\"\"
return self.node[self.DATA]
def get_left_subtree(self):
\"\"\"Gets the left subtree of the node.\"\"\"
return self.node[self.LEFT]
def get_right_subtree(self):
\"\"\"Gets the right subtree of the node.\"\"\"
return self.node[self.RIGHT]
def __str__(self):
return \'[\'+str(self.node[self.DATA])+\', \'+str(self.node[self.LEFT])+\', \'+\\
str(self.node[self.RIGHT])+\']\'
ReconstructTree.py
from ListBinaryTree import ListBinaryTree
def display_intro():
UPI = \"jpet954\"
message = \"Binary Tree reconstructed by \" + UPI
print(message)
def inorder_ans():
answer = input(\"Please enter the inorder sequence: \")
return answer
def postorder_ans():
answer = input(\"Please enter the postorder sequence: \")
return answer
def build_tree(inorder, postorder):
if len(inorder) == 0:
return None
if len(inorder) == 1:
return ListBinaryTree(inorder[0])
root = ListBinaryTree(postorder[len(postorder) - 1])
index = inorder.index(postorder[len(postorder) - 1])
root.left = root.insert_tree_left(build_tree(inorder[0:index], postorder[0:index]))
root.right = root.insert_tree_right(build_tree(inorder[index+1 : len(inorder)], postorder[index : len(postorder)-1]))
return root
def main():
display_intro()
inorder_tree = inorder_ans()
postorder_tree = postorder_ans()
tree = build_tree(inorder_tree,postorder_tree)
print(tree)
main()

