LeetCode Java刷题笔记—103. 二叉树的锯齿形层序遍历

Posted 刘Java

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode Java刷题笔记—103. 二叉树的锯齿形层序遍历相关的知识,希望对你有一定的参考价值。

103. 二叉树的锯齿形层序遍历

给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。

中等难度,这道题实际上就是102. 二叉树的层序遍历的变种,先学会了102,那么这道题就简单了。

既然要实现遍历顺序的交叉,那么我们使用一个boolean的变量作为标志位即可,第一次为true,遍历后改为false,然后再改为true……。true表示从左到右遍历,false表示从右向左遍历。

对于每一层的List,采用LinkedList结构,这样就能通过标志位结合add和addFirst方法实现不同顺序的遍历的效果。

public List<List<Integer>> zigzagLevelOrder( TreeNode root )

   ArrayList<List<Integer>> lists = new ArrayList<>();
   if( root == null )
      return lists;
   
   LinkedList<TreeNode> nodes = new LinkedList();
   nodes.add( root );
   boolean flag = true;
   while( !nodes.isEmpty() )
      int size = nodes.size();
      //采用LinkedList而不是ArrayList
      LinkedList<Integer> nums = new LinkedList();
      for( int i = 0; i < size; i++ )
         TreeNode node = nodes.removeFirst();
         //通过标志位判断,采用达到交替顺序遍历的效果
         if( flag )
            nums.add( node.val );
         
         else
            //采用addFirst达到从右到左遍历的效果
            nums.addFirst( node.val );
         
         if( node.left != null )
            nodes.add( node.left );
         
         if( node.right != null )
            nodes.add( node.right );
         
      
      lists.add( nums );
      flag = !flag;
   
   return lists;

以上是关于LeetCode Java刷题笔记—103. 二叉树的锯齿形层序遍历的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode刷题笔记-数据结构-day15

LeetCode Java刷题笔记—226. 翻转二叉树

LeetCode Java刷题笔记—111. 二叉树的最小深度

LeetCode Java刷题笔记—101. 对称二叉树

LeetCode Java刷题笔记—101. 对称二叉树

LeetCode Java刷题笔记— 543. 二叉树的直径