阅读目录
题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
思路及Python实现
- 利用两个栈来实现,利用栈先进后出的特点,两个栈分别存储奇数层和偶数层的结点,具体做法是:根结点进入栈1,栈1中的元素依次出栈,每出栈一个元素,就将该元素的子结点压入栈2,要注意栈2的入栈顺序是先左子结点后右子结点(栈先进后出,右子结点后入栈,打印的时候才能先出栈1)。栈2中的元素依次出栈,并将元素的子结点压入栈1中,栈1的入栈顺序是先右子结点后左子结点,这样两个栈依次交替直到两个栈都为空!
class Solution:
def Print(self, pRoot):
if pRoot is None:
return []
stack1 = [pRoot]
stack2 = []
ret = []
while stack1 or stack2:
if stack1:
temp_ret = []
while stack1:
temp_node = stack1.pop()
temp_ret.append(temp_node.val)
if temp_node.left:
stack2.append(temp_node.left)
if temp_node.right:
stack2.append(temp_node.right)
ret.append(temp_ret)
if stack2:
temp_ret = []
while stack2:
temp_node = stack2.pop()
temp_ret.append(temp_node.val)
if temp_node.right:
stack1.append(temp_node.right)
if temp_node.left:
stack1.append(temp_node.left)
ret.append(temp_ret)
return ret