题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
- 用队列nodeQ来临时存储节点,进而访问其子节点。
- 队列里两层之间有个要有个标记
|
,层的奇偶性也要有一个标记issOdd。- 访问到该标记时,在队列末尾添加该标记。
- 要有个缓存nodeLayer来存放同一层访问到的节点值,该层结束时根据奇偶标记来选择输出顺序。
1 | def levelrootSnake(root): |
相对于前一个代码用一个数据结构来存储各层的节点,需要两个辅助数据:
- 对层数是奇、偶,做标记。
- 两层的分割点,要做标记
想到用两个数据结构来分别存储奇数、偶数层的节点,每个循环内依次对两个数据结构进行处理,不必追踪层数和层间隔。
- 注意这两个数据结构可以用队列,也可以用栈,其实区别不大。比如前面的代码用数组,后面的代码用栈。
- 如下代码用的是栈,注意第一个栈先压入左节点,第二个栈先压入右节点。
1 | class Solution: |