Morris算法遍历一棵二叉树,时间复杂度O(n),但是空间复杂度却只用神奇的O(1),下面说一下Morris遍历的流程,首先规定来到的当前结点即为cur
public static void morrisPre(Node head) {
if(head == null)
return;
Node cur = head;
Node mostRight = null;
while(cur != null) {
mostRight = cur.left;
if(mostRight != null) {
while(mostRight.right != null && mostRight.right != cur)
mostRight = mostRight.right;
if(mostRight == null) {
mostRight.right = cur;
System.out.println(cur.value + " ");
cur = cur.left;
continue;
} else
mostRight.right = null;
}
cur = cur.right;
}
System.out.println();
}
public static void morrisPre(Node head) {
if(head == null)
return;
Node cur = head;
Node mostRight = null;
while(cur != null) {
mostRight = cur.left;
if(mostRight != null) {
while(mostRight.right != null && mostRight.right != cur)
mostRight = mostRight.right;
if(mostRight == null) {
mostRight.right = cur;
cur = cur.left;
continue;
} else
mostRight.right = null;
}
System.out.println(cur.value + " ");
cur = cur.right;
}
System.out.println();
}