使用Morris遍历二叉树可以实现空间复杂度 O(1) 时间复杂度 O(N)
下面是Morris遍历的主要过程
1.初始时,另cur=head
2.若cur=null,结束,否则继续
3.若cur无左子树,另cur=cur.right
4.若cur有左子树,找到左子树上最右的节点,记为mostRight
如果mostRight.right=null则, mostRight.right=cur; cur=cur.left;
如果mostRight.right=cur;则, mostRight.right=null; cur=cur.right;
public void morris(Node head){
if(head==null)
return ;
Node cur=head;
Node mostRight=null;
while(cur!=null){
mostRight.right=cur.left;
if(mostRight.right!=null ){
while(mostRight.right!+null&&mostRight.right!=cur)
mostRight=mostRight.right;
}
if(mostRight.right==null){
mostRight.right=cur;
cur=cur.left
continue;
}else{
mostRight.right=null;
}
cur=cur.left;
}
}