刷了几十道题,今天终于不看题解自己写出了一道!题解中python版的比较少,所以就来记一个python版的。
分析:用两个栈和一个列表来实现,一个栈li1用于遍历奇数层的节点,另一个栈li2用于遍历偶数层的节点,列表re用于装入每一层的数据,最后返回re。
1、若根节点不为空,将根节点装入li1,列表re装入根节点的值。
2、li1每弹出一个节点,就将该节点的右左孩子装入li2,当li1中所有节点全部出栈后,下一层的节点也都已按从右到左的顺序装入li2,此时列表re装入li2中的节点的值。
3、li2每弹出一个节点,就将该节点的左右孩子装入li1,当li2中所有节点全部出栈后,下一层的节点也都已按从左到右的顺序装入li1,此时列表re装入li1中的节点的值 。
4、然后再对li1,li2依次做同样的操作。
这里需要注意的是li2装入的是右左孩子,而li1装入的是左右孩子,这样就能保证li1是从左到右的顺序,而li2是从右到左的顺序。
代码:
class Solution:def Print(self, pRoot):
# write code here
if pRoot == None:
return []
li1 = [pRoot]
li2 = []
re = [[pRoot.val]]
while li1 or li2:
while li1:
p1 = li1.pop()
if p1.right is not None:
li2.append(p1.right)
if p1.left is not None:
li2.append(p1.left)
if li2 != []:
re.append([i.val for i in li2])
while li2:
p2 = li2.pop()
if p2.left is not None:
li1.append(p2.left)
if p2.right is not None:
li1.append(p2.right)
if li1 != []:
re.append([i.val for i in li1])
return re