java 按层打印二叉树

牛客题目链接

1. 题目考点

  1. bfs
  2. 如何确定每层最后一个节点
  3. 类似题目:二叉树的字行层次遍历

2. 考点解析

  1. 由于此题简单,直接给出答案(具体分析看类似题目)
ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
    ArrayList<ArrayList<Integer>> res = new ArrayList<>();
    if (pRoot == null) return res;
    ArrayList<Integer> tempArr = new ArrayList<>();
    Queue<TreeNode> queue = new LinkedList<>();
    int curLevelCnt = 1, nextLevelCnt = 0;
    queue.offer(pRoot);
    while (!queue.isEmpty()) {
        TreeNode node = queue.poll();
        tempArr.add(node.val);
        curLevelCnt -= 1;
        if (node.left != null) {
            queue.offer(node.left);
            nextLevelCnt += 1;
        }
        if (node.right != null) {
            queue.offer(node.right);
            nextLevelCnt += 1;
        }
        if (curLevelCnt == 0) {
            curLevelCnt = nextLevelCnt;
            nextLevelCnt = 0;
            res.add(new ArrayList<>(tempArr));
            tempArr.clear();
        }
    }
    return res;
}

你可能感兴趣的:(二叉树,数据结构,队列)