[剑指offer]按之字形顺序打印二叉树
题目描述:
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
示例1
输入
{8,6,10,5,7,9,11}
返回值
[[8],[10,6],[5,7,9,11]]
解题思路:
本题很容易想到层序遍历:利用队列先进先出的特性,与二叉树的层序遍历类似。
# -*- 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 not pRoot: return []
# 层序遍历
queue = [pRoot]
res = []
Desc = False
while queue:
n = len(queue)
sub_lst = [] # 初始化
for i in range(n):
tmp = queue.pop(0)
sub_lst.append(tmp.val)
if tmp.left: queue.append(tmp.left)
if tmp.right: queue.append(tmp.right)
if Desc:
res.append(sub_lst[::-1])
else:
res.append(sub_lst[:])
Desc = not Desc
return res