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;
        }
    }
}

------------------

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

Popular posts from this blog

EJB - Stateful vs Stateless

Mirror binay tree - Java