题目
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
思路
层序遍历的进阶
每行的节点的访问顺序是相反的,我们可以用两个栈来隔行存储,一个栈中根据另一个栈的栈顶元素的“左结点->右结点”的顺序存储节点,而另一个栈根据另一个栈的栈顶元素的“右子树->左子树”的顺序存储节点,直到两个栈都为空。
代码
def Print(pRoot):
if pRoot == None:
return []
stack1 = []
stack2 = []
ans = []
stack1.append(pRoot)
while len(stack1) != 0 or len(stack2) != 0:
if len(stack1) != 0:
sub = []
while len(stack1) != 0:# 遍历当前层
root = stack1.pop()
sub.append(root.val)
if root.left != None:
stack2.append(root.left)
if root.right != None:
stack2.append(root.right)
ans.append(sub)
if len(stack2) != 0:
sub = []
while len(stack2) != 0:
root = stack2.pop()
sub.append(root.val)
if root.right != None:
stack1.append(root.right)
if root.left != None:
stack1.append(root.left)
ans.append(sub)
return ans
# [[1], [3, 2], [4]]