public void mirrisPre(TreeNode cur) {if(cur == null) return;TreeNode root = cur; // 保存根节点,因为再后序的遍历中cur引用一直再变。TreeNode mostRight = null;while(cur != null) {mostRight = cur.left;if(mostRight != 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;printNode(cur.left);}}cur = cur.right; // 向右走}printNode(root.left); // 打印根节点的最右边链表}// 打印右边的链表public void printNode(TreeNode head) {TreeNode tail = reverse(head);while(tail != null) {System.out.println(tail.val);tail = tail.right;}reverse(tail);}// 反转链表public TreeNode reverse() {TreeNode prev = null,curr,next;curr = head;while(curr != null) {next = curr.right;curr.right = prev;prev = curr;curr = next;}return prev;}
