【算法训练】剑指offer#32 - III 从上到下打印二叉树 III

一、描述

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

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

例如:
给定二叉树: [3,9,20,null,null,15,7],

示例 :

    3
   / \
  9  20
    /  \
   15   7

返回:

[
  [3],
  [20,9],
  [15,7]
]

二、思路

class Solution:
    def levelOrder(self, root: TreeNode) -> List[int]:
        now_left = False
        if not root:
            return []
        res, queue = [], []
        queue.append(root)
        while queue:
            temp = []
            for _ in range(len(queue)):
                node = queue.pop(0)
                if now_left:
                    if node.left:
                        queue.append(node.left)
                    if node.right:
                        queue.append(node.right)
                else:
                    if node.right:
                        queue.append(node.right)
                    if node.left:
                        queue.append(node.left)
                temp.append(node.val)
            res.append(temp)
            now_left = not now_left
        return res

不行哦,这样只是调转了同节点的左右,这道题是整层调转

  • 那就这样,给temp加层判断就行了,反转插入res

三、解题

class Solution:
    def levelOrder(self, root: TreeNode) -> List[int]:
        isRevers = False
        if not root:
            return []
        res, queue = [], []
        queue.append(root)
        while queue:
            temp = []
            for _ in range(len(queue)):
                node = queue.pop(0)
                if node.left:
                    queue.append(node.left)
                if node.right:
                    queue.append(node.right)
                temp.append(node.val)
            if isRevers:
                temp = temp[::-1]
            isRevers = not isRevers
            res.append(temp)
        return res
posted @ 2022-01-18 19:26  小拳头呀  阅读(27)  评论(0编辑  收藏  举报