class TNode
{
int data;
TNode left;
TNode right;
TNode(int d)
{
data = d;
left= null;
right=null;
}
}
class TreeBuilder
{
static int postIndex;
static int[] in, post;
TNode Start;
static void setValue(int[] i, int[] p)
{
in = i;
post = p;
postIndex=in.length-1; //Change 1
}
static int findInIndex(int inStart, int inEnd, int value)
{
for(int i=inStart; i<=inEnd; i++)
if(in[i]==value)
return i;
return -1;
}
//Main method with the logic for building tree using Pre and Inorder traversals
static TNode buildTree(int inStart, int inEnd)
{
if(inStart>inEnd)
return null;
TNode node = new TNode(post[postIndex--]); //Change 2
if(inStart==inEnd)
return node;
int inIndex = findInIndex(inStart, inEnd, node.data);
//Change 3
node.right=buildTree(inIndex+1, inEnd);
node.left=buildTree(inStart, inIndex-1);
return node;
}
}
class TreeBuilderDemo
{
public static void main(String[] args)
{
int[] in = {8, 4, 10, 9, 11, 2, 5, 1, 6, 3, 7};
int[] post = {8, 10, 11, 9, 4, 5, 2, 6, 7, 3, 1};
TreeBuilder.setValue(in, post);
TNode start = TreeBuilder.buildTree(0,in.length-1);
System.out.print("\nPreorder\t: ");
printPreorder(start);
System.out.print("\n\nInorder\t\t: ");
printInorder(start);
System.out.print("\n\nPostorder\t: ");
printPostorder(start);
System.out.println("");
}
static void printInorder(TNode node)
{
if (node == null)
return;
printInorder(node.left);
System.out.print(node.data + "\t ");
printInorder(node.right);
}
static void printPreorder(TNode node)
{
if (node == null)
return;
System.out.print(node.data + "\t ");
printPreorder(node.left);
printPreorder(node.right);
}
static void printPostorder(TNode node)
{
if (node == null)
return;
printPostorder(node.left);
printPostorder(node.right);
System.out.print(node.data + "\t ");
}
}
Click here to learn Building a Binary Tree using Inorder and Preorder Traversals in Java.
No comments:
Post a Comment
Your comments are very much valuable for us. Thanks for giving your precious time.