leetcode —— 面试题 04.03. 特定深度节点链表

给定一棵二叉树,设计一个算法,创建含有某一深度上所有节点的链表(比如,若一棵树的深度为 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    # 返回列表
发布了320 篇原创文章 · 获赞 21 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_37388085/article/details/105202667