二叉樹層次遍歷

層次遍歷二叉樹:即從左到右,從上到下,從左到右依次遍歷。

廢話不多說,直接上圖

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;
	        
	    }


本人原創,轉載請註明出處…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章