Morris inorder traversal
private void create (List&lt;? extends T&gt; items) {
    root = new TreeNode&lt;T&gt;(null, items.get(0), null);


This crashes if an empty list is passed in. And since you have this function...

public MorrisInOrder(List&lt;? extends T&gt; items) {
    create(items);
}


It's entirely possible for such a thing to happen.



final int left = 2 * i + 1;
final int right = 2 * i + 2;


right can be set to left + 1 instead.



current  = current.right;


and 

TreeNode&lt;T&gt; current  = root;


There's an extra space in here.



            /*
             * found the in-order predecessor.
             */
            while (predecessor.right != null &amp;&amp; predecessor.right != current) {
                predecessor = predecessor.right;
            }


You're using a block-style comment for single line comment. Why?