import java.util.*;
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
// 重点在于使用pre来保存当前节点的前一个节点
public TreeNode head = null;
public TreeNode pre = null;
public TreeNode Convert(TreeNode pRootOfTree) {
// 整体的思路还是中序遍历递归,先Convert(root.left)再写逻辑处理,最后递归遍历右子树Convert(root.rieght)
// 最重要的是通过pre记录前一个节点,类似每个节点都与自身的父节点相连
if(pRootOfTree == null) return null;
// 首先递归到最左最小值
Convert(pRootOfTree.left);
if(pre == null){
head = pRootOfTree;
pre = pRootOfTree;
}
// 当前节点与上一节点建立连接,将pre设置为当前值
else{
// right连接后继节点
pre.right = pRootOfTree;
pRootOfTree.left = pre;
pre = pRootOfTree;
}
Convert(pRootOfTree.right);
return head;
}
}