广度优先搜索法
用层序遍历能很方便的解这道题。将每层的节点放入队列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