题目描述:
题解:
在上一题基础上改进剑指 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