Day5 从上到下打印二叉树【树】

题目:
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。

思路:
用2 or 3个列表,这里解释用2个列表(输出不分层)的做法。
res列表存放最终结果
queue列表存放当前遍历层的节点
从root开始遍历,初始queue=[root]
需要①queue[0]节点的值存入res列表②将queue[0]节点 删除
若当前节点有左子树,将其存入queue
若当前节点有右子树,将其存入queue
此时queue为下一层,接下来:对下一层进行遍历

代码A:
将打印结果 按顺序存在一个列表中
输入:[3,9,20,null,null,15,7]
输出:[3,9,20,15,7]

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

class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        if root is None:
            return None
        queue=[root]
        res=[]
        while queue:
            node=queue.pop(0)
            res.append(node.val)
            if node.left:
                queue.append(node.left)
            if node.right:
                queue.append(node.right)
        return res

代码B:
输入:[3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]

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

class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        if root is None:
            return []#如果写return None,leetcode会报错
        queue=[root]#存放当前遍历层的节点,当指针用,连接到下一层
        res=[]#存放最终结果
        while queue:
            l=len(queue)#l为当前遍历层的节点数量
            temp=[]#存放当前遍历层的节点的值
            for i in range(l):#按序对当前遍历层的每一个节点进行操作
                cur=queue.pop(0)#把第一个即将加入列表的节点 压出栈
                temp.append(cur.val)#该节点的值存入列表
                if cur.left:
                    queue.append(cur.left)
                if cur.right:
                    queue.append(cur.right)
            res.append(temp)#当前层 已经遍历完了,把存有当前层val的列表,存入res列表中(有点绕,因为结果要求是嵌套列表),下一步,出for循环,仍在while循环中,开始遍历下一层
        return res#整个二叉树都遍历完了,返回最终res

猜你喜欢

转载自blog.csdn.net/weixin_47128888/article/details/112645317