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

题目描述:

题解:

在上一题基础上改进剑指 Offer 32 - I. 从上到下打印二叉树python java_ganggang的博客-CSDN博客 

1.增加一个layernum记录当前层数,判断应该按照从左到右还是从右到左的顺序。

2.在将保存该层节点val的数组reslayer添加到noderes时,判断layernum的奇偶。

本来计划在向队列中添加新节点的时候,根据layernum判断应该先添加节点坐子节点还是右子节点,但是根据题目的要求,不止在添加子节点的时候要区分,还要考虑从该层右边节点开始还是从左边开始添加,没有上面的方法简洁。

class Solution(object):
    def levelOrder(self, root):
        nodeque = []
        noderes = []
        layernum = 1
        if root==None:
            return noderes
        layer = []
        layer.append(root)
        nodeque.append(layer)
        while len(nodeque)!=0:
            mylayer = nodeque[0]
            nodeque.remove(mylayer)
            reslayer = []
            newlayer = []
            for node in mylayer:
                reslayer.append(node.val)
                if node.left:
                    newlayer.append(node.left)
                if node.right:
                    newlayer.append(node.right)
            if len(newlayer)>0:
                nodeque.append(newlayer)
            if len(reslayer)>0:
                if layernum%2==1:
                    noderes.append(reslayer)
                else:
                    reslayer.reverse()
                    noderes.append(reslayer)
                layernum = layernum+1
        return noderes

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值