/***************************************
* 時間: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();
}
}
測試結果
