Forgive me if its asked before but i couldn't find appropriate answer. I have an major issue in converting binary search tree traversal written with recursive method into non recursive method. kindly help me out. Here is a code using recursive method in java.
//BinarySt class
public interface BinaryST {
public void insert(Integer nData);
public Integer remove(Integer nData);
public boolean isExist(Integer nData);
public String preOrder();
public String inOrder();
public String postOrder();
}
//BinaryTreeNode class
public class BinaryTreeNode {
Integer element;
BinaryTreeNode LChild;
BinaryTreeNode RChild;
BinaryTreeNode() {}
}
//BinarySearchTree implements BinaryST class
public class BinarySearchTree implements BinaryST{
protected StringBuffer s;
protected BinaryTreeNode root;
public BinarySearchTree() {}        
public BinarySearchTree(Integer nData)
{
    root = new BinaryTreeNode();
    root.element = nData;
}
public void insert(Integer nData)
{
    if( root==null ) {
        root = new BinaryTreeNode();
        root.element = nData;
        return;
    }
    boolean flag=true;
    BinaryTreeNode c=root;
    while(flag) {
        if( nData>=c.element ) {
            if( c.RChild==null ) {
                c.RChild = new BinaryTreeNode();
                c.RChild.element = nData;
                flag = false;
            }
            c = c.RChild;
        } 
        else {
            if( c.LChild==null ) {
                c.LChild = new BinaryTreeNode();
                c.LChild.element = nData;
                flag = false;
            }
            c = c.LChild;
        }
    }
}
public Integer remove(Integer nData)
{
    return new Integer(5);
}
public boolean isExist(Integer nData)
{
    return true;
}
public String preOrder()
{
    if( root==null ) {
        return new String( "null" );
    }
    s = new StringBuffer("");
    prOrder( root );
    return new String(s);
}
public String inOrder()
{
    if( root==null ) {
        return new String( "null" );
    }
    s = new StringBuffer("");
    iOrder( root );
    return new String(s);
}
public String postOrder()
{
    if( root==null ) {
        return new String( "null" );
    }
    s = new StringBuffer("");
    poOrder( root );
    return new String(s);
}
private void prOrder(BinaryTreeNode t) {
    if( t!=null ) {
        s.append( t.element.toString() + " " );
        prOrder( t.LChild );
        prOrder( t.RChild );
    }
}
private void iOrder(BinaryTreeNode t) {
    if( t!=null ) {
        iOrder( t.LChild );
        s.append( t.element.toString() + " " );
        iOrder( t.RChild );
    }
}
private void poOrder(BinaryTreeNode t) {
    if( t!=null ) {
        poOrder( t.LChild );
        poOrder( t.RChild );
        s.append( t.element.toString() + " " );
    }
}
}
//Runner class
public class Runner {
public static void main(String[] args) {
    BinarySearchTree a = new BinarySearchTree();
    System.out.println( "Pre-Order : "+a.preOrder() );
    System.out.println( "In-Order  : "+a.inOrder() );
    System.out.println( "Post-Order: "+a.postOrder() );
    a.insert( (Integer) 100 );
    a.insert( (Integer) 50  );
    a.insert( (Integer) 150 );
    a.insert( (Integer) 25  );
    a.insert( (Integer) 75  );
    a.insert( (Integer) 125 );
    a.insert( (Integer) 175 );
    a.insert( (Integer) 60  );
    a.insert( (Integer) 160 );
    a.insert( (Integer) 200 );
    a.insert( (Integer) 155 );
    System.out.println( "Pre-Order : "+a.preOrder() );
    System.out.println( "In-Order  : "+a.inOrder() );
    System.out.println( "Post-Order: "+a.postOrder() );
}
}
 
     
    