a method for in order binary search tree traversal in O(1) memory iteratively. no stack needed.
public class MorrisTraversal{
static class Node{
  int data;
  Node left;
  Node right;
  Node (int data)
  {
    this.data = data;
    left = null;
    right = null;
  }
}
static class BinaryTree{
static Node root;
void MorrisTraversal (Node node){
  if(node == null)
    return;
  Node current , pre;
  current = node;
  while(current != null)
  {
    if(current.left == null)
    {
      System.out.print(current.data + " ");
      current = current.right;
    }
    else{
      pre = current.left;
      while(pre.right != null && pre.right != current ){
        pre = pre.right;
      }
      if(pre.right == null){
        pre.right = current;
        current = current.left;
      }
      else{
        pre.right = null;
        System.out.print(current.data+"  ");
        current = current.right;
      }
    }
  }
}
}
public static void main(String args[]) {
       int sum = 14;
       BinaryTree tree = new BinaryTree();
       tree.root = new Node(4);
       tree.root.left = new Node(3);
       tree.root.right = new Node(4);
       tree.root.left.left = new Node(1);
       tree.root.left.right = new Node(3);
       tree.MorrisTraversal(tree.root);
   }
}