package com. my. util;
public class TreeNode {
public int value;
public TreeNode left;
public TreeNode right;
public TreeNode ( int data) {
this . value = data;
}
}
package com. my. suanfa;
import java. util. LinkedList;
import java. util. Queue;
import com. my. util. TreeNode;
public class Solution12 {
public TreeNode convert1 ( TreeNode head) {
Queue< TreeNode> queue = new LinkedList < TreeNode> ( ) ;
inOrderToQueue ( head, queue) ;
if ( queue. isEmpty ( ) ) {
return head;
}
head = queue. poll ( ) ;
TreeNode pre = head;
pre. left = null;
TreeNode cur = null;
while ( ! queue. isEmpty ( ) ) {
cur = queue. poll ( ) ;
pre. right = cur;
cur. left = pre;
pre = cur;
}
pre. right = null;
return head;
}
public void inOrderToQueue ( TreeNode head, Queue< TreeNode> queue) {
if ( head == null) {
return ;
}
inOrderToQueue ( head. left, queue) ;
queue. offer ( head) ;
inOrderToQueue ( head. right, queue) ;
}
public TreeNode convert2 ( TreeNode head) {
if ( head == null) {
return null;
}
TreeNode last = process ( head) ;
head = last. right;
last. right = null;
return head;
}
public TreeNode process ( TreeNode head) {
if ( head == null) {
return head;
}
TreeNode leftE = process ( head. left) ;
TreeNode leftS = leftE != null ? leftE. right : null;
TreeNode rightE = process ( head. right) ;
TreeNode rightS = rightE != null ? rightE. right : null;
if ( leftE != null && rightE != null) {
leftE. right = head;
head. left = leftE;
head. right = rightS;
rightS. left = head;
rightE. right = leftS;
return rightE;
} else if ( leftE != null) {
leftE. right = head;
head. left = leftE;
head. right = leftS;
return head;
} else if ( rightE != null) {
head. right = rightS;
rightS. left = head;
rightE. right = head;
return rightE;
} else {
head. right = head;
return head;
}
}
}