import java.util.*;
public class Solution {
    // 重点在于使用pre来保存当前节点的前一个节点
    public TreeNode head = null;
    public TreeNode pre = null;
    public TreeNode Convert(TreeNode pRootOfTree) {
        // 整体的思路还是中序遍历递归,先Convert(root.left)再写逻辑处理,最后递归遍历右子树Convert(root.rieght)
        if(pRootOfTree == null) return null;
        // 首先递归到最左最小值,以题中的例子为例,这时候pre = 4,head = 4
        Convert(pRootOfTree.left);
        if(pre == null){
            head = pRootOfTree;
            pre = pRootOfTree;
        }
        // 当前节点与上一节点建立连接,将pre设置为当前值,pre就是遍历树的指针,而head的值只需要等于最左侧最小的节点就可以了,标记为链表的头
        else{
            // right连接后继节点,以题中的例子为例,第一个栈顶元素是4,下一个就是6,此时pre==4,pRootOfTree==6,pre.right = pRootOfTree就是将4的右指针指向后继,之后让6的左指针指向前驱pre。最后将pre的值等于当前栈顶元素6,之后出栈进行下一次递归。
            pre.right = pRootOfTree;
            pRootOfTree.left = pre;
            pre = pRootOfTree;
        }
        Convert(pRootOfTree.right);
        return head;
        
    }
}