按之字形打印二叉树

按之字形打印二叉树-牛客

思路

  • 层序遍历:双头队列
    用一个flag标志是否需要把当层结点反转,每一层都改变flag状态,奇数行不反转,偶数行反转;flag初始为true,在当前遍历前,flag=not flag; 当层遍历结束后,flag为true, 反转。
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param pRoot TreeNode类 
# @return int整型二维数组
#
from collections import deque
class Solution:
    def Print(self , pRoot: TreeNode) -> List[List[int]]:
        # 层序遍历,双头队列
        res=[]
        if pRoot==None:
            return res
        #双头队列
        que=deque([pRoot])
        flag=True
        while que:
            size=len(que)
            #记录二叉树的某一行
            tmp=[]
            #从0行开始,奇数行反转,偶数行不反转
            flag=not flag
            #当前层遍历
            for _ in range(size):
                node=que.popleft()
                tmp.append(node.val)
                if node.left:
                    que.append(node.left)
                if node.right:
                    que.append(node.right)
            #奇数行反转,偶数行不反转
            if flag:
                tmp=tmp[::-1]
            res.append(tmp)
        return res 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值