java队列解决层序遍历
求二叉树的层序遍历
http://www.nowcoder.com/questionTerminal/04a5560e43e24e9db4595865dc9c63a3
在这这里我们使用一个队列来解决,层序遍历和二叉树的广度优先遍历很相似,就是额外增加了一个分组的东西。我这里使用int型变量记录本层节点的数量,用next记录下一层节点的数量。当本层节点弹出的时候,now--,当下一层节点添加到队列时候,next++,如此反复直到队列为空。
ArrayList<ArrayList<Integer>> levelOrder; public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) { levelOrder=new ArrayList<ArrayList<Integer>>(); if(root==null)return levelOrder; LinkedList<TreeNode>queue=new LinkedList<>(); int now=1,next=0; queue.add(root); while(!queue.isEmpty()){ ArrayList<Integer> list = new ArrayList<>(); while(now>=1){ TreeNode node = queue.poll(); list.add(node.val); now--; if(node.left!=null){ queue.add(node.left); next++; } if(node.right!=null){ queue.add(node.right); next++; } } now=next; next=0; levelOrder.add(list); } return levelOrder; }