我对不起数据结构老师,全忘完了

在参考了评论区之后,代码如下:

class Solution:
    def Convert(self , pRootOfTree: TreeNode) -> TreeNode:
        if not pRootOfTree:
            return None
        
        if not pRootOfTree.left and not pRootOfTree.right:
            return pRootOfTree
        
        left = self.Convert(pRootOfTree.left)
        
        p = left
        while left and p.right:
            p = p.right
        
        if left:
            p.right = pRootOfTree
            pRootOfTree.left = p
        
        right = self.Convert(pRootOfTree.right)
        
        if right:
            right.left = pRootOfTree
            pRootOfTree.right = right
        
        return left if left else pRootOfTree

首先判断 pRootOfTree,若空返回 None,若叶子节点返回自身
left 接收左子树形成的双链表表头,通过下方的 while 循环寻找双链表的表尾
若 left 存在则一定能找到表尾,令 pRootOfTree 加入双链表,否则 pRootOfTree 为双链表表头
right 接收右子树形成的双链表表头,若存在则将其加入双链表
最后返回双链表的头结点

对不起我应该好好学数据结构的