二叉树层次遍历

层次遍历二叉树:即从左到右,从上到下,从左到右依次遍历。

废话不多说,直接上图

A
B
C
E
H
D
F
G

上面二叉树的层次遍历结果为: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;
	        
	    }


本人原创,转载请注明出处…

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值