protected void travelPostOrder(){
        Stack<TreeNode<T> > st = new Stack<TreeNode<T> > ();
        TreeNode<T> node = root;

        do{
            if( node!= null ){
                st.Push(node);
                node = node.getLeft();
            }else{
                while (!st.isEmpty()) {
                    if (node == st.Top().getRight()) {
                        node = st.Pop();
                        System.out.print(node.getData() + " ");
                    } else {
                        node = st.Top().getRight();
                        break;
                    }
                }//end of while
                if( st.isEmpty() ) break;  //finish travel!
            }
        }while(true);
    }