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;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值