前往此题

广度优先搜索法

用层序遍历能很方便的解这道题。将每层的节点放入队列queue,为每层生成一个链表将节点的值赋值到链表cur中。
因为cur在遍历二叉树结束时,它指向的是链表的末尾,所以我们需要在初始化的时候将cur指向链表dummy, 最后将链表dummy放入结果res

算法思路

初始化队列queue, 结果列表res, 初始链表dummy。队列作为遍历的条件,它始终存储着二叉树每层的节点。由于链表最后会走到末尾,所以需要初始化一个dummy来指向它的头节点。
层序遍历二叉树,将每层的值赋值到链表中,将链表放入res

代码

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def listOfDepth(self, tree: TreeNode) -> List[ListNode]:
        if not tree: return []
        queue = collections.deque()
        queue.append(tree)
        res = []

        while queue:
            size = len(queue)
            node = ListNode(None)
            cur = node
            for _ in range(size):
                treenode = queue.popleft()
                cur.next = ListNode(treenode.val)
                cur = cur.next
                if treenode.left: queue.append(treenode.left)
                if treenode.right: queue.append(treenode.right)
            res.append(node.next)
        return res