【剑指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;
    }
}
相关文章
相关标签/搜索