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;
}
}