LeetCode Java刷题笔记—103. 二叉树的锯齿形层序遍历
Posted 刘Java
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode Java刷题笔记—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. 二叉树的锯齿形层序遍历的主要内容,如果未能解决你的问题,请参考以下文章