【劍指Offer】二叉樹——廣度優先搜索

package cn.dzp.flyroc.offer;

import java.util.ArrayList;

public class BreadthFirstSearchDemo {

    /*題目描述:從上往下打印出二叉樹的每一個節點,同層節點從左至右打印*/

    /*思路:利用隊列兩個隊列來實現,一個隊列保存節點,另外一個存放節點值*/

    /*實現步驟:
    * 1、定義兩個對列,一個存放節點,一個存放節點值
    * 2、判斷根節點是否爲空
    * 3、將根節點加入到節點對列中,根節點值加入到節點值對列
    * 4、遍歷對列中的元素
    * 5、將該節點的左右子節點加入到對列中*/

    //代碼實現

    /*
    * 定義TreeNode
    * */
    public static class TreeNode{

        int val;        //定義節點值
        TreeNode left;      //定義左節點
        TreeNode right;     //定義右節點

        TreeNode(int val){

            this.val = val;
        }
    }

    public static ArrayList<Integer> breadthFirstSearch(TreeNode root){

        ArrayList<TreeNode> listNode = new ArrayList<>();       //定義存放節點的對列
        ArrayList<Integer> listVal = new ArrayList<>();     //定義存放節點值的對列

        if (root == null){      //判斷根節點是否爲空

            return listVal;
        }

        listNode.add(root);     //將根節點加入到listNode
        listVal.add(root.val);      //將根節點的值加入到listVal

        for (int i = 0; i < listNode.size(); i++){      //遍歷對列

            TreeNode node = listNode.get(i);        //定義一個節點存放遍歷的元素

            if (node.left != null){     //若不爲空,將節點的左節點加入到對列中

                listNode.add(node.left);
                listVal.add(node.left.val);
            }
            if (node.right != null){        //若不爲空,將節點的右節點加入到對列中

                listNode.add(node.right);
                listVal.add(node.right.val);
            }
        }

        return listVal;
    }
}
相關文章
相關標籤/搜索