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