# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    head = None #定义函数外变量head,用于找到最左子树节点作为链表首节点,最终函数返回值
    pre = None  #定义前驱临时节点,用于当前遍历节点指向前驱,随着递归不断变化
    def Convert(self , pRootOfTree ):
        # write code here
        if not pRootOfTree:
            return None
        
        self.Convert(pRootOfTree.left) # 不断递归寻找最左叶子节点
        if self.head == None:   # 找到最左叶子节点
            self.head = pRootOfTree #  找到后先赋值head
            self.pre = pRootOfTree  #  找到后前驱pre赋值,和head保持一致
        else:   #非最左叶子情况
            self.pre.right = pRootOfTree #刷新pre的后驱为当前节点 
            pRootOfTree.left = self.pre #刷新当前节点的前驱为pre
            self.pre = pRootOfTree  #刷新前驱为当前节点为下次递归做准备
        self.Convert(pRootOfTree.right)
        
        return self.head #head会返回多次,但head值保持最左叶子