按之字形顺序打印二叉树 -python

思路:之前遇到过层序打印二叉树的题,使用一个队列存储每一层的节点,当一个节点出队列时,他的左右孩子入队列。那么这个问题是在这个问题的基础上加了点限制,因此我们也可以在之前的思路上稍作修改。
首先用curLayer作为队列存储当前层的所有节点,把这一层标记成0或者1, 再用nextLayer层存储从curLayer成出队的节点的左右孩子(这是不同点,层序打印的是放在一个队列中的,因为现在需要标记不同的层,因此不能放在一个队列里面),根据标记的0或者1进行顺序输出和反序输出。

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    def Print(self, pRoot):
        if not pRoot:
            return []
        # write code here
        curLayer = [pRoot]
        res = []
        cnt = 0
        while curLayer:
            nextLayer = []
            tmp = []
            for node in curLayer:
                tmp.append(node.val)
                if node.left:
                    nextLayer.append(node.left)
                if node.right:
                    nextLayer.append(node.right)
            if cnt == 0:
                res.append(tmp)
            else:
                res.append(tmp[::-1])
            curLayer = nextLayer
            cnt = (cnt+1) % 2
        return res
posted @ 2019-08-12 21:48  Dolisun  阅读(747)  评论(0编辑  收藏  举报