刷了几十道题,今天终于不看题解自己写出了一道!题解中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