【剑指 Offer】32 - I. 从上到下打印二叉树。 难度等级:中等。思路:BFS 广度优先搜索

1. 题目

从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。

示例:

输入二叉树: [3,9,20,null,null,15,7]
    3
   / \
  9  20
    /  \
   15   7
返回:[3,9,20,15,7]

2. BFS 解法

二叉树的从上至下打印(即按层打印),又称为二叉树的 广度优先搜索(BFS)

BFS 通常借助 队列 的先入先出特性来实现

2.1 使用队列的先入先出实现

code:

# 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[int]:
        if not root:
            return []
        queue=[root]
        ans=[root.val]
        while queue:
            temp=queue.pop(0)
            if temp.left:
                queue.append(temp.left)
                ans.append(temp.left.val)
            if temp.right:
                queue.append(temp.right)
                ans.append(temp.right.val)
        return ans

该方法对 queue 进行先入先出操作,还涉及到了 pop(0) 操作,导致时间复杂度较高

2.2 对队列进行枚举(不需要增删元素)

# 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[int]:
        queue = [root]
        res = []
        while queue:
            tmp = []
            for i in queue:
                if i:
                    tmp.append(i.left)
                    tmp.append(i.right)
                    res.append(i.val)
            queue = tmp
        return res           

猜你喜欢

转载自blog.csdn.net/qq_43799400/article/details/131455620