题目描述:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
思路:参考了牛客上的答案,关键在于设置两个list分别存当前层和下一层的节点和值,当前层读取完成后将下一层的节点list赋给当前层,每层读取完后将当前层的value值list存到最终list中,在最终的list中按照奇偶数不同按照不同顺序取数即可。
# -*- 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(pRoot == None):
return []
node = []#存当前层的节点
nextnode = []#存下一层的节点
res = [[pRoot.val]]#存每层的value总集合
val = []#存当前层的value
ans = []#奇偶数层数据顺序转换
node.append(pRoot)
while(node):
tmp = node[0]
if(tmp.left != None):
nextnode.append(tmp.left)
val.append(tmp.left.val)
if(tmp.right != None):
nextnode.append(tmp.right)
val.append(tmp.right.val)
node.pop(0)
if(len(node) == 0):
node = nextnode
if(val):
res.append(val)
val = []
nextnode = []
for i in range(len(res)):
if(i&1):
ans.append(res[i][::-1])
else:
ans.append(res[i])
return ans