package suanfa.tree;

import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
import java.util.concurrent.LinkedBlockingDeque;

/**

  • 二叉树的层序遍历

  • /
    public class LevelOrder {

    /**

    • 二叉树的层序遍历 依赖queue实现

    • @param root

    • @return

    • /
      public static List<List<integer>> levelOrder(TreeNode root) {
      List<List<integer>> list = new ArrayList<>();</integer></integer>

      Queue<treenode> queue = new LinkedBlockingDeque<>();
      queue.add(root);</treenode>

      while (!queue.isEmpty()) {

        List<Integer> subList = new ArrayList<>();
      
        int currentLevelSize = queue.size();
        //遍历每一层 
        for (int i = 1; i < currentLevelSize; i++) {
      
            TreeNode tmpNode = queue.poll();
            subList.add(tmpNode.val);
      
            if (tmpNode.left != null) {
                queue.offer(tmpNode.left);
            }
      
            if (tmpNode.right != null) {
                queue.offer(tmpNode.right);
            }
        }
        list.add(subList);

      }

      return list;
      }

static class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;

    public int getVal() {
        return val;
    }

    public void setVal(int val) {
        this.val = val;
    }

    public TreeNode getLeft() {
        return left;
    }

    public void setLeft(TreeNode left) {
        this.left = left;
    }

    public TreeNode getRight() {
        return right;
    }

    public void setRight(TreeNode right) {
        this.right = right;
    }
}

}