剑指offer 32 Ⅲ -从上到下打印二叉树 - python

32 阅读1分钟

题目描述:

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

思路:

这道题做法和剑指offer - 把二叉树打印多行- python差不多,不同之处在于不同的层打印顺序不同:

  • 偶数层,从左往后打印
  • 奇数层,从右往左打印

因此,在保存每层结果时,设置index来判断当前层是偶数层还是奇数层,如果是偶数层直接保存;否则使用反转结果后再保存。

class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        if not root: return []

        r = []
        q = [root]
        flag = 0
        while q:
            t, nextLayer = [], []
            for node in q:
                t.append(node.val)
                if node.left: nextLayer.append(node.left)
                if node.right: nextLayer.append(node.right)

            if flag % 2 == 0:r.append(t)
            else:r.append(t[::-1])
            flag += 1
            q = nextLayer
        
        return r