1. 程式人生 > >畢業了-java二叉樹層次遍歷算法

畢業了-java二叉樹層次遍歷算法

== 需要 數據 nbsp 測試 class system col ava

/***************************************     
 * 時間:2017年6月23日      
 * author:lcy     
 * 內容:二叉樹的層次遍歷      
 * 需要借助隊列這個數據結構,直接import就可以了
 *     1.首先將根節點放入隊列中。 
       2.當隊列為非空時,循環執行步驟3到步驟5,否則執行6; 
       3.出隊列取得一個結點,訪問該結點; 
       4.若該結點的左子樹為非空,則將該結點的左子樹入隊列; 
       5.若該結點的右子樹為非空,則將該結點的右子樹入隊列; 
       6.結束。
 **************************************
*/ import java.util.ArrayDeque; import java.util.Queue; public class BinTree { private char date; private BinTree lchild; //左孩子 private BinTree rchild; //右孩子 private BinTree(char c ){ date = c; } public static void BFSOrder(BinTree T) {
if(T==null) return ; Queue<BinTree> queue = new ArrayDeque<BinTree>(); //隊列小知識:使用offer和poll優於add和remove之處在於它們返回值可以判斷成功與否,而不拋出異常 queue.offer(T); //算法1:根結點進入隊列 while(!queue.isEmpty()) //算法2:若隊列非空,循環執行步驟 3-5,否則執行步驟6 { T
=queue.poll(); //算法3:將一個結點出隊列,並訪問該結點 System.out.print(T.date); if(T.lchild!=null) //算法4:若該結點的左子樹為非空,則將該結點的左孩子結點入隊列; queue.offer(T.lchild); if(T.rchild!=null) //算法5:若該結點的左子樹為非空,則將該結點的右孩子結點入隊列; queue.offer(T.rchild); } //步驟6結束 } public static void main(String[] args) { BinTree b1 = new BinTree(‘a‘); BinTree b2 = new BinTree(‘b‘); BinTree b3 = new BinTree(‘c‘); BinTree b4 = new BinTree(‘d‘); BinTree b5 = new BinTree(‘e‘); BinTree b6 = new BinTree(‘f‘); BinTree b7 = new BinTree(‘g‘); /** * a * / * b c * / \ / * d e f g */ b1.lchild = b2; b1.rchild = b3; b2.lchild = b4; b2.rchild = b5; b3.lchild = b6; b3.rchild = b7; System.out.println(12121); BinTree.BFSOrder(b1); System.out.println(); } }
測試結果
技術分享

 

畢業了-java二叉樹層次遍歷算法