LeetCode:103 .二叉树锯齿层序遍历
层序横移
使用两端的队列,各层从最后面取。
然后,根据遍历顺序,先添加左节点还是右节点。
整理一下思路就行了
AC Code
/* * definitionforabinarytreenode.*公共类treenode { * intval; * TreeNode left; * TreeNode right; *treenode(intx ) { val=x; } * } */class解决方案{//层序遍历publiclistlistintegerzigzaglevelorder (treenode root ) ) listlistintegerans=new arraylistion 列表integer list=new ArrayList (; if (根==空) { return ans; //双端队列dequetreenodequeue=新链接列表(; queue.add (根; 布尔型b=真; //root先从左到右使用while (! queue.isEmpty () ) { int size=queue.size; 列表treenode tmp=new ArrayList (; for(intI=0; i size; I ) { treenode node=空; node=queue.removeLast (; tmp.add (节点; }for(treenodetr:tmp ) if (b ) if ) tr.left!=null queue.add (tr.left ); if(tr.right!=null queue.add (tr.right ); }else{if(tr.right!=null queue.add (tr.right ); if(tr.left!=null queue.add (tr.left ); }list.add(tr.val ); (b=! B; ans.add (新阵列列表); list.clear (; }返回Ans; }