题目
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行在按照从左到右的顺序打印,其他行以此类推。例如,按之字形顺序打印下图中的二叉树。
打印结果为:
1
3 2
4 5 6 7
15 14 13 12 11 10 9 8
2. 解题思路
思路一:
使用的容器不变,仍然使用队列来实现。根据节点所处层数的不同而修改元素添加的顺序,打印的时候仍然顺序打印出来。
我们需要三个变量:
一个变量表示在当前层中还没有打印的节点数;
一个变量表示下一层节点的数目。
一个变量来记录这是第几行,奇数行如何如何,偶数行如何如何。
代码:
**思路二:**书中思路
3. 总结
队列和栈都可以实现这个题,但是选择不同的容器来实现,最后的时间复杂度和空间复杂是不一样的,就这道题而言,明显使用栈来实现的,时间复杂度更低(主要是低在弹出需要打印的元素这一步,队列这一步时间复杂度为O(n), 而栈这一步的时间复杂度为O(1))。