【leetcode】102:二叉树的层序遍历

这个题目比较基础,可以对树的广度优先搜索的模版稍作更改,就可以得到我们的答案了。题目如下:

 

 解答如下:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        if not root: return []
        #跟结点入queue
        queue = [root]
        res = []
        while queue:
            res.append([node.val for node in queue])
            #存储当前层的孩子节点列表
            ll = []
            #对当前层的每个节点遍历
            for node in queue:
                #如果左子节点存在,入队列
                if node.left:
                    ll.append(node.left)
                #如果右子节点存在,入队列
                if node.right:
                    ll.append(node.right)
            #后把queue更新成下一层的结点,继续遍历下一层
            queue = ll
        return res

方法二:

def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
        if root is None:
            return []

        ans=[]
        q=[root]
        #队列的特点:先进先出
        #只要队列里面有node,则不断从头开始遍历这个队列
        while q:
             #vals用来装载每一层的node数字
            vals=[]
             #q的length不会再循环当中发生变化
            for _ in range(len(q)):
                 #取出队列最前面的node
                node=q.pop(0)
                #装进每一层的vals当中
                vals.append(node.val)
                 #把当前node的下一层的节点装入队列当中
                if node.left:
                    q.append(node.left)
                if node.right:
                    q.append(node.right)
            ans.append(vals)
        return ans

 

对二叉树层序遍历的模版如下:

def BFS(root):
    if root:
        res = []
        queue = [root]
        while queue:
            currentNode = queue.pop(0)
            res.append(currentNode.val)
            if currentNode.left:
                queue.append(currentNode.left)
            if currentNode.right:
                queue.append(currentNode.right)
    return res

 

posted @ 2021-10-11 21:16  Geeksongs  阅读(29)  评论(0编辑  收藏  举报

Coded by Geeksongs on Linux

All rights reserved, no one is allowed to pirate or use the document for other purposes.