题目描述:从上往下打印出二叉树的每个节点,同层节点从左至右打印。

i c } m l p a o s r s f } t u F n F o c o r v q w } u 2 p a u h n 3 r r e i d S i u l a o n q e e l p i } i } t l t u . e r f f i u T e a ! t i o t r u p q n n n n i e e p u n t e q e q o e : e e e ( w u w u n N n u w n R e R e o [ d e R e o u o u { d T ( . o w o e o e e r r i o R t . t . ( e o s t o ? a ? a _ e o E o . p . p N t m = t l p r p r o ) p ? e e i e o d t q . f n g n o e y u v t d h d t ? e a ( t ( : ] { u l ! n n e = e ! e T = . ? w = w r r ? n R R e [ e i o n o e T m 0 l o i o N r o ) t l t o e v { ? ? d e e . { . e N F l r ? o i e i ) d r f g e s t h { ] t ) t ( ( ) ) )

算法思想:题目实际上就是二叉树的层序遍历,如上图,我们借助队列来存储节点来实现层序遍历的效果,具体操作:

  1. 先将根节点入队列
  2. 将根节点出队列,打印;然后将其左右子树依次入队列(若其存在)
  3. 重复步骤2,直到将树遍历完为止。 上面步骤最核心的就是步骤2,步骤2为什么能够实现层序的效果呢?当该节点出栈的时候,才会将下一层的节点(其左右子树)入栈,这样就保证了一层一层的打印效果;由于左子树一直在右子树前面进行操作,所以,不会乱序,可以实现从左往右的效果。

github地址:https://github.com/cubegao/LeetCode