Offer 32 - III. 从上到下打印二叉树 III

63 阅读1分钟

1. 题目

leetcode.cn/problems/co…

image.png

2. 解析

2.1 二叉树的广度优先搜索

使用队列,优先进入队列的优先出来,一层一层的走

def bfs(root: Node):
    queue = [root]
    res = []
    while queue:
        n = queue.pop(0)
        n.left and queue.append(n.left)
        n.right and queue.append(n.right)
        res.append(n.val)
    return res

2.2 二叉树的深度优先算法

使用栈,先入后出,将每一个深度层级走完,再走下一个深度层级

def dfs(root: Node):
    stack = [root]
    res = []
    while stack:
        n = stack.pop()
        # 先加入右边的,保证可以先将左侧的层级先走
        n.right and stack.append(n.right)
        n.left and stack.append(n.left)
        res.append(n.val)
    return res

3. 考点

对层级的不同进行排序,需要考虑列表嵌套,需要对每一个层级的数据进行遍历 然后加入结果集

4. 核心代码

from typing import List


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 not root:
            return []
        res, queue = [], [root]
        while queue:
            tmp = []
            # 遍历该层的所有元素,加入子集
            for _ in range(len(queue)):
                node = queue.pop(0)
                node.left and queue.append(node.left)
                node.right and queue.append(node.right)
                tmp.append(node.val)
            # 判断层级是否应该倒序
            res.append(tmp if len(res) % 2 == 0 else tmp[::-1])
        return res


if __name__ == '__main__':
    r = TreeNode(3)
    r9 = TreeNode(9)
    r20 = TreeNode(20)
    r15 = TreeNode(15)
    r7 = TreeNode(7)
    r.left = r9
    r.right = r20
    r20.left = r15
    r20.right = r7
    s = Solution()
    print(s.levelOrder(r))