Binary tree traversal - without recursion - Java
package ds.trees;
/**
* Created by skupunarapu on 12/20/2015.
*/
public class TreeTraversalNonRec {
public void preOrder(TreeNode root){
if(root == null)
return;
Stack s = new Stack();
while(true){
while(root != null){
System.out.println(root.getData());
s.push(root);
root = root.getLeft();
}
if(s.isEmpty())
break;
root = s.pop();
root = root.getRight();
}
return;
}
public void inOrder(TreeNode root){
if(root == null)
return;
Stack s = new Stack();
while(true){
while(root != null){
s.push(root);
root = root.getLeft();
}
if(s.isEmpty()) {
break;
}
root = s.pop();
System.out.println(root.getData());
root = root.getRight();
}
return;
}
}
class Stack{
int TOP = -1;
static final int MAX = 10;
TreeNode[] stack = new TreeNode[MAX];
public boolean isEmpty(){
if(TOP == -1)
return true;
else
return false;
}
public boolean isFull(){
if(TOP == MAX)
return true;
else
return false;
}
public TreeNode pop() {
TreeNode popEle = null;
if (!isEmpty()) {
popEle = stack[TOP];
TOP--;
}
return popEle;
}
public void push(TreeNode ele){
if(!isFull()){
TOP = TOP + 1;
stack[TOP] = ele;
}
}
}
/**
* Created by skupunarapu on 12/20/2015.
*/
public class TreeTraversalNonRec {
public void preOrder(TreeNode root){
if(root == null)
return;
Stack s = new Stack();
while(true){
while(root != null){
System.out.println(root.getData());
s.push(root);
root = root.getLeft();
}
if(s.isEmpty())
break;
root = s.pop();
root = root.getRight();
}
return;
}
public void inOrder(TreeNode root){
if(root == null)
return;
Stack s = new Stack();
while(true){
while(root != null){
s.push(root);
root = root.getLeft();
}
if(s.isEmpty()) {
break;
}
root = s.pop();
System.out.println(root.getData());
root = root.getRight();
}
return;
}
}
class Stack{
int TOP = -1;
static final int MAX = 10;
TreeNode[] stack = new TreeNode[MAX];
public boolean isEmpty(){
if(TOP == -1)
return true;
else
return false;
}
public boolean isFull(){
if(TOP == MAX)
return true;
else
return false;
}
public TreeNode pop() {
TreeNode popEle = null;
if (!isEmpty()) {
popEle = stack[TOP];
TOP--;
}
return popEle;
}
public void push(TreeNode ele){
if(!isFull()){
TOP = TOP + 1;
stack[TOP] = ele;
}
}
}
------------------
Test:
package ds.trees;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Created by skupunarapu on 12/20/2015.
*/
public class TreeTraversalNonRecTest {
TreeTraversalNonRec treeTraversalNonRec;
TreeNode a;
@Before
public void init(){
a = new TreeNode();
TreeNode b = new TreeNode();
TreeNode c = new TreeNode();
TreeNode d = new TreeNode();
TreeNode e = new TreeNode();
TreeNode f = new TreeNode();
TreeNode g = new TreeNode();
g.setData("g");
f.setData("f");
e.setData("e");
d.setData("d").setLeft(f);
c.setData("c").setRight(g);
b.setData("b").setLeft(d).setRight(e);
a.setData("a").setLeft(b).setRight(c);
treeTraversalNonRec = new TreeTraversalNonRec();
}
@Test
public void testPreOrder() throws Exception {
System.out.println("PreOrder");
treeTraversalNonRec.preOrder(a);
}
@Test
public void testInOrder() throws Exception {
System.out.println("InOrder");
treeTraversalNonRec.inOrder(a);
}
}
----------------------------------
Github:
https://github.com/sujjjith/DS/blob/master/src/main/java/ds/trees/TreeTraversalNonRec.java
https://github.com/sujjjith/DS/blob/master/src/test/java/ds/trees/TreeTraversalNonRecTest.java
Comments
Post a Comment