给定一棵二叉树,设计一个算法,创建含有某一深度上所有节点的链表(比如,若一棵树的深度为 D,则会创建出 D 个链表)。返回一个包含所有深度的链表的数组。
示例:
解题思路:使用常规的广度优先遍历就可以得到结果,这里需要稍微注意一下的是返回的得是链表,因此可以在遍历每一层的时候都创建一个链表,然后遍历结束的时候放到列表中。
# 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) # 首先将树的根节点放进队列中
lists = [] # 用于存储返回的链表
while queue: # 广度优先遍历,每次把当前节点的子树放进队列中
list1 = ListNode(None) # 创建一个空的链表
cur = list1 # 因为list1在迭代中需要不断延伸,因此需要另一个节点保存链表起始值
for _ in range(len(queue)): # 对于树的每一层节点
nums = queue.popleft() # 取出队列中的起始点
list1.next = ListNode(nums.val) # 创建一个新的链表节点拼接到list1中
list1 = list1.next # 链表节点list1进行延伸
if nums.left: # 如果当前节点的左子树不为空,则放进队列中
queue.append(nums.left)
if nums.right: # 如果当前节点的右子树不为空,则放进队列中
queue.append(nums.right)
lists.append(cur.next) # 将每一层得到的链表存进列表中
return lists # 返回列表