Tree from Postorder and Inorder Python
- Get link
- X
- Other Apps
PROGRAM TO CONSTRUCT A BINARY TREE FROM POSTORDER AND INORDER
class Node: def __init__(self, x): self.data = x self.left = None self.right = None# Recursive function to construct binary of size n# from Inorder traversal in[] and Postorder traversal# post[]. Initial values of inStrt and inEnd should# be 0 and n -1. The function doesn't do any error# checking for cases where inorder and postorder# do not form a treedef buildUtil(inn, post, innStrt, innEnd): global mp, index # Base case if (innStrt > innEnd): return None # Pick current node from Postorder traversal # using postIndex and decrement postIndex curr = post[index] node = Node(curr) index -= 1 # If this node has no children then return if (innStrt == innEnd): return node # Else finnd the inndex of this node inn # Inorder traversal iIndex = mp[curr] # Using inndex inn Inorder traversal, # construct left and right subtress node.right = buildUtil(inn, post, iIndex + 1, innEnd) node.left = buildUtil(inn, post, innStrt, iIndex - 1) return node# This function mainly creates an unordered_map,# then calls buildTreeUtil()def buildTree(inn, post, lenn): global index # Store indexes of all items so that we # we can quickly find later for i in range(lenn): mp[inn[i]] = i # Index in postorder index = lenn - 1 return buildUtil(inn, post, 0, lenn - 1)# This funtcion is here just to testdef preOrder(node): if (node == None): return print(node.data, end = " ") preOrder(node.left) preOrder(node.right)# Driver Codeif __name__ == '__main__': inn = [ 4, 8, 2, 5, 1, 6, 3, 7 ] post = [ 8, 4, 5, 2, 6, 7, 3, 1 ] n = len(inn) mp, index = {}, 0 root = buildTree(inn, post, n) print("Preorder of the constructed tree :") preOrder(root)
OUTPUT:
Preorder of the constructed tree : 1 2 4 8 5 3 6 7
- Get link
- X
- Other Apps
Comments
Post a Comment