[剑指 Offer 32 - 从上到下打印二叉树 III ] | 刷题打卡

249 阅读1分钟

今天我们来做一道LeetCode上的题目,原题链接:剑指 Offer 32 - 从上到下打印二叉树 III

题目描述

  • 请实现一个函数按照“之”字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
  • 例如:
    • 给定二叉树: [3,9,20,null,null,15,7],
    3
   / \
  9  20
    /  \
   15   7
  • 返回:
  [
    [3],
    [20,9],
    [15,7]
  ]
  • 提示:
  节点总数 <= 1000

思路分析

  • 二叉树遍历使用双端队列:collections.deque()
  • 结果保存使用有序词典:collections.OrderedDict()
  • “之”字返回策略:偶数行从左到右追加,奇数行从右向左追加

代码

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

class Solution(object):
    def levelOrder(self, root):
        """
        :type root: TreeNode
        :rtype: List[List[int]]
        """
        if not root: return []
        res_dict, queue = collections.OrderedDict(), collections.deque()
        level = 0
        queue.append((root, level))
        while queue:
            node, level = queue.popleft()
            if level in res_dict:
                res_dict[level].append(node.val) if level % 2 == 0 else res_dict[level].insert(0, node.val)
            else:
                res_dict[level] = [node.val]
            level += 1
            if node.left: queue.append((node.left, level))
            if node.right: queue.append((node.right, level))
        return res_dict.values()

总结

  • collections.deque()
    • append():追加函数
    • popleft():从头部取数据
  • collections.OrderedDict()
    • values():返回值数组

附录

本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情