使用中序遍历按从小到大顺序遍历节点;保存首节点(首节点的左子节点设为空)和前节点;将当前节点作为前节点的右子节点,前节点作为当前节点的左子节点,并将前节点引用指向当前节点;最后将前节点的右子节点设为空
public class Solution {
private TreeNode preNode;
private TreeNode headNode;
public TreeNode Convert(TreeNode pRootOfTree) {
if(pRootOfTree == null){
return null;
}
Convert(pRootOfTree.left);
if(headNode == null){
headNode = pRootOfTree;
preNode = headNode;
preNode.left = null;
}else{
preNode.right = pRootOfTree;
pRootOfTree.left = preNode;
preNode = pRootOfTree;
}
Convert(pRootOfTree.right);
preNode.right = null;
return headNode;
}
}