package test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
enum TraversalType {
PREORDER, INORDER, POSTORDER;
}
public class ConstructTreeBack {
static Node root = new Node();
static TraversalType traversalType;
static void formSubTrees(List treeList) {
List leftSubTree = new ArrayList();
List rightSubTree = new ArrayList();
Iterator it = treeList.iterator();
int rootNodeVal = root.getValue();
while (it.hasNext()) {
int nodeVal = it.next();
if (rootNodeVal > nodeVal) {
leftSubTree.add(nodeVal);
} else if (rootNodeVal treeList) {
Node node = new Node();
if (traversalType.equals(TraversalType.PREORDER)) {
if (null != treeList.get(0)) {
node.setValue(treeList.get(0));
}
if (null != treeList.get(1)) {
node.setLeftNode(new Node(treeList.get(1)));
}
if (null != treeList.get(2)) {
node.setRightNode(new Node(treeList.get(2)));
}
} else if (traversalType.equals(TraversalType.INORDER)) {
if (null != treeList.get(1)) {
node.setValue(treeList.get(1));
}
if (null != treeList.get(0)) {
node.setLeftNode(new Node(treeList.get(0)));
}
if (null != treeList.get(2)) {
node.setRightNode(new Node(treeList.get(2)));
}
} else if (traversalType.equals(TraversalType.POSTORDER)) {
if (null != treeList.get(2)) {
node.setValue(treeList.get(2));
}
if (null != treeList.get(0)) {
node.setLeftNode(new Node(treeList.get(0)));
}
if (null != treeList.get(1)) {
node.setRightNode(new Node(treeList.get(1)));
}
}
return node;
}
public static void main(String[] args) {
int rootNodeVal = 0;
List treeList;
/*PRE ORDER TRAVERSAL*/
Integer treeArrPreOrder[] = { 4, 2, 1, 3, 6, 5, 7 };
rootNodeVal = treeArrPreOrder[0]; root.setValue(rootNodeVal);
root.setRoot(true);
treeList = Arrays.asList(treeArrPreOrder);
traversalType = TraversalType.PREORDER;
formSubTrees(treeList);
/*IN ORDER TRAVERSAL*/
Integer treeArrInOrder[] = { 1, 2, 3, 4, 5, 6, 7 };
int rootIndex = 3;
root.setValue(treeArrInOrder[rootIndex]);
root.setRoot(true);
treeList = Arrays.asList(treeArrInOrder);
traversalType = TraversalType.INORDER;
formSubTrees(treeList);
/*POST ORDER TRAVERSAL*/
Integer treeArrPostOrder[] = { 1, 3, 2, 5, 7, 6, 4 };
rootNodeVal = treeArrPostOrder[treeArrPostOrder.length - 1];
root.setValue(rootNodeVal); root.setRoot(true);
treeList = Arrays.asList(treeArrPostOrder);
traversalType = TraversalType.POSTORDER;
formSubTrees(treeList);
}
}