题目:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
实现思路:该题本质上与【把二叉树打印成多行】是一个题,区别在于本题需要判断当前层输出方向。考虑增加一个标志变量指示当前遍历朝向。
def Print(self, pRoot):
# write code here
nodelist = []
outlist = []
# 增加标志变量,初始化为从左至右
lefttoright = True
if pRoot:
nodelist.append([pRoot])
else:
return outlist
while len(nodelist) and len(nodelist[0]):
# 如果当前层是从左到右遍历
if lefttoright:
outlist.append([node.val for node in nodelist[0]])
# 修改标志变量
lefttoright = False
else:
# 如果当前层是从右至左遍历输出,则逆序将结点值存入输出列表
outlist.append([nodelist[0][i].val for i in range(len(nodelist[0])-1, -1, -1)])
lefttoright = True
curnodelist = []
for i in range(len(nodelist[0])):
curnode = nodelist[0][i]
if curnode.left:
curnodelist.append(curnode.left)
if curnode.right:
curnodelist.append(curnode.right)
nodelist.append(curnodelist)
del nodelist[0]
return outlist
测试二叉树结构:
![二叉树](https://img-blog.csdn.net/20180702175730219?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIwMTQxODY3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 输出结果
[[4], [6, 2], [3, 5, 7], [1]]