python3,典型的中序遍历
中序遍历,两个指针记录前驱结点和后驱结点,递归后驱结点,为空时前驱结点到达尾部(即最大/最右)。如果要求做成循环列表,额外连上首尾即可。
class Solution:
    def Convert(self , pRootOfTree ):
        def dfs(cur):
            if not cur: return
            dfs(cur.left) # 递归左子树
            if self.pre: # 修改节点引用
                self.pre.right, cur.left = cur, self.pre
            else: # 记录头节点
                self.head = cur
            self.pre = cur # 保存 cur
            dfs(cur.right) # 递归右子树
        
        if not pRootOfTree: return
        self.pre = None
        dfs(pRootOfTree)
        # 如果做成循环链表,只需把首位连上即可。首即head,尾即pre
        # self.head.left, self.pre.right = self.pre, self.head
        return self.head