1. 程式人生 > >面試題_BFs(廣度優先演算法,或者二叉樹順序輸出)

面試題_BFs(廣度優先演算法,或者二叉樹順序輸出)

最近參與面試常常問道關於演算法方面的題1.:按照圖例實現演算法;
分析題得到:明顯是廣度優先演算法(BFS演算法),利用佇列的方式【進佇列– 取值– 出佇列(判斷有無子節點)–所有直接子節點進佇列】
這裡寫圖片描述

建立節點類

/**
 * 建立樹類
 * @author cc_小白成長
 *
 */
class TreeNode{
    public Integer value;//值
    public TreeNode leftTree; // 左節點
    public TreeNode rightTree; // 右節點
    //構造方法
    public TreeNode(int value){
        this
.value = value; } }

建立物件/與演算法實現

/**
 * 測試數相關方法
 * @author cc_小白成長
 *
 */
public class TestBFs {
    public static void main(String[] args) {
        //建立一個簡單的二叉樹
         TreeNode root = new TreeNode(1);
         root.leftTree = new TreeNode(2);
         root.leftTree.leftTree = new TreeNode(4);
         root.leftTree.rightTree = new
TreeNode(5); root.rightTree = new TreeNode(3); root.rightTree.leftTree = new TreeNode(6); root.rightTree.rightTree = new TreeNode(7); TestBFs tb = new TestBFs(); //呼叫方法 tb.BFs(root); } /** * BFS需要用佇列去實現。 * @param root 樹的根節點 */
public void BFs(TreeNode root){ // 判斷樹是否為空 為空則直接返回 if(root==null) return; //建立連結串列 利用泛型 LinkedList<TreeNode> list = new LinkedList<TreeNode>(); //把根節點新增到連結串列中 list.add(root); //用於每一次臨時存放連結串列poll出的節點 **一次建立多次使用 TreeNode currentNode; while(!list.isEmpty()){//迴圈判斷連結串列是否有值 currentNode=list.poll(); //注意方法poll/peek的區別 System.out.print(currentNode.value+"\t"); if(currentNode.leftTree!=null){//判斷樹有沒有左節點 list.add(currentNode.leftTree);//重點 子節點進佇列 } if(currentNode.rightTree!=null){//判斷樹有沒有右節點 list.add(currentNode.rightTree);//重點 子節點進佇列 } //這裡同理可以適用用於n叉樹 } } }

測試結果:
這裡寫圖片描述

到此廣度優先演算法實現,結束;注意廣度優先首先考慮到利用佇列的特性(先進先出)去實現該演算法。