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


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

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM