层次遍历二叉树:即从左到右,从上到下,从左到右依次遍历。
废话不多说,直接上图
上面二叉树的层次遍历结果为:A,B,C,D,E,F,G,H
层次遍历的算法思想:
1.初始化一个空队列Q
2.若二叉树bt为空树,则直接返回;
3.将二叉树bt的根节点放入队列Q
4.若队列非空,重复如下操作
a.对头元素出队并访问该元素
b.若该元素的左孩子非空,则将该节点的左孩子节点指针入队;
C.若该元素的右孩子非空,则将该节点的右孩子节点指针入队;
/* boolean add(E e);
如果可以在不违反容量限制的情况下立即将指定的元素插入此队列,成功后返回{@code true},如果当前没有空间可用,则抛出{@code IllegalStateException}。*/
/boolean offer(E e);
如果可以在不违反容量限制的情况下立即将指定的元素插入到此队列中。若队列没有可用空间,返回false./
/* E remove();
检索并删除此队列的头,该方法区别于poll的是如果队列为空会抛出异常**/
/* E poll();
检索并删除此队列的头,如果队列为空则返回null;*/
/E element();
检索队列的头。这个方法与{@link #peek peek}的不同之处在于,在队列为空时抛出异常。/
/* E peek();
检索队列的头部,如果该队列为空,则返回{@code null}。*/
具体代码:
public static ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer> list =new ArrayList<Integer>();
if(root==null) {
return list;
}
Queue<TreeNode> q=new LinkedList<TreeNode>();
q.add(root);
while(!q.isEmpty()) {
TreeNode tr=q.poll();
//poll()删除队列头部元素
// if(q.poll().left!=null) {
if(tr.left!=null) {
q.add(tr.left);
}
if(tr.right!=null) {
q.add(tr.right);
}
list.add(tr.val);
}
return list;
}
本人原创,转载请注明出处…