二叉树层序遍历用队列来处理。队列先进先出。add()。remove()、offer()、poll();

/**

  • @Author: Mr.huang
  • @Date: 2021/08/09/14:37
  • @Description: NC15 求二叉树的层序遍历 给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)
  • 例如:
  • 给定的二叉树是{3,9,20,#,#,15,7},
  • 该二叉树层序遍历的结果是
  • [
  • [3],
  • [9,20],
  • [15,7]
  • ]
  • /

public class NC15 {
public static void main(String[] args) {
TreeNode treeNode1 = new TreeNode();
TreeNode treeNode2 = new TreeNode();
TreeNode treeNode3 = new TreeNode();
treeNode1.setVal(3);
treeNode1.setTreeLeft(treeNode2);
treeNode1.setTreeRight(treeNode3);
treeNode2.setVal(9);
treeNode3.setVal(20);
TreeNode treeNode4 = new TreeNode();
TreeNode treeNode5 = new TreeNode();
treeNode3.setTreeLeft(treeNode4);
treeNode3.setTreeRight(treeNode5);
ArrayList<ArrayList<integer>> arrayLists = levelOrder(treeNode1);
String s = Arrays.toString(arrayLists.toArray());
System.out.println(s);
}</integer>

public static ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {
    // write code here
    //queue 先进先出
    Queue<TreeNode> treeNodeQueue=new LinkedList<>();
    treeNodeQueue.add(root);
    ArrayList<ArrayList<Integer>> nodeList=new ArrayList<>();
    if (root==null){return nodeList;}
    while (!treeNodeQueue.isEmpty()){
        int size=treeNodeQueue.size();
        ArrayList<Integer> arrayList=new ArrayList<>();
        while (size-- >0){
            TreeNode t = treeNodeQueue.poll();
            arrayList.add(t.val);
            if (t.getTreeLeft()!=null){
                treeNodeQueue.add(t.getTreeLeft());
            }
            if (t.getTreeRight()!=null){
                treeNodeQueue.add(t.getTreeRight());
            }
        }
        nodeList.add(arrayList);
    }
    return nodeList;
}

}

@Data
class TreeNode{
int val;
TreeNode treeLeft;
TreeNode treeRight;
}