题目描述:
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
解题思路:
使用两个栈stack1和stack2,stack1存储奇数行结点(先保存右子树,再保存左子树,实际上是保存栈stack2出栈结点的右子树、左子树),stack2存储偶数行结点(先保存左子树,再保存右子树,实际上保存stack1出栈结点的左子树、右子树)。
代码实现:
# 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 []
stack1 = [pRoot]
stack2 = []
ret = [] # 存储打印的二叉树
while stack1 or stack2:
if stack1:
tmpRet = [] # 存储奇数行结点
while stack1:
tmpNode = stack1.pop()
tmpRet.append(tmpNode.val)
if tmpNode.left:
stack2.append(tmpNode.left)
if tmpNode.right:
stack2.append(tmpNode.right)
ret.append(tmpRet)
if stack2:
tmpRet = [] # 存储偶数行结点
while stack2:
tmpNode = stack2.pop()
tmpRet.append(tmpNode.val)
if tmpNode.right:
stack1.append(tmpNode.right)
if tmpNode.left:
stack1.append(tmpNode.left)
ret.append(tmpRet)
return ret