Tree from Postorder and Inorder Java
- Get link
- X
- Other Apps
PROGRAM TO CONSTRUCT A BINARY TREE FROM POSTORDER AND INORDER
import java.util.*;class MAIN{/* A binary tree node has data, pointer to leftchild and a pointer to right child */static class Node{ int data; Node left, right;};// Utility function to create a new node/* Helper function that allocates a new node */static Node newNode(int data){ Node node = new Node(); node.data = data; node.left = node.right = null; return (node);} /* Recursive function to conbinary of size nfrom Inorder traversal in[] and Postorder traversalpost[]. Initial values of inStrt and inEnd shouldbe 0 and n -1. The function doesn't do any errorchecking for cases where inorder and postorderdo not form a tree */static Node buildUtil(int in[], int post[], int inStrt, int inEnd){ // Base case if (inStrt > inEnd) return null; /* Pick current node from Postorder traversal using postIndex and decrement postIndex */ int curr = post[index]; Node node = newNode(curr); (index)--; /* If this node has no children then return */ if (inStrt == inEnd) return node; /* Else find the index of this node in Inorder traversal */ int iIndex = mp.get(curr); /* Using index in Inorder traversal, con left and right subtress */ node.right = buildUtil(in, post, iIndex + 1, inEnd); node.left = buildUtil(in, post, inStrt, iIndex - 1); return node;}static HashMap<Integer,Integer> mp = new HashMap<Integer,Integer>();static int index; // This function mainly creates an unordered_map, then// calls buildTreeUtil()static Node buildTree(int in[], int post[], int len){ // Store indexes of all items so that we // we can quickly find later for (int i = 0; i < len; i++) mp.put(in[i], i); index = len - 1; // Index in postorder return buildUtil(in, post, 0, len - 1 );}/* This funtcion is here just to test */static void preOrder(Node node){ if (node == null) return; System.out.printf("%d ", node.data); preOrder(node.left); preOrder(node.right);}// Driver codepublic static void main(String[] args){ int in[] = { 4, 8, 2, 5, 1, 6, 3, 7 }; int post[] = { 8, 4, 5, 2, 6, 7, 3, 1 }; int n = in.length; Node root = buildTree(in, post, n); System.out.print("Preorder of the constructed tree : \n"); 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