剑指offer11

题目描述

从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

解题思路

其实这道题多了一个每一层输出一行,我相信要是直接在一行输出的话,大家都知道怎么在一行输出,用一个队列就可以实现,但是多了一个每一层输出一行的条件之后,其实也不麻烦,我们只需要在输出的打印的时候知道每层有多少个节点就好了,就可以解决换行输出这个问题了

代码实现

public ArrayList<ArrayList<Integer>> print(TreeNode pRoot) {
    if (pRoot == null) {
        return null;
    }
    ArrayList<ArrayList<Integer>> lists = new ArrayList<ArrayList<Integer>>();
    Queue<TreeNode> queue = new LinkedList<TreeNode>(); 
    queue.offer(pRoot);
    //声明两个用于记录整数,start用来记录这一层已经访问了几个节点了,end用于记录当前层的所有节点数
    int start = 0, end = 1;
    ArrayList<Integer> list = new ArrayList<Integer>();
    while (!queue.isEmpty()) {
        TreeNode node = queue.remove();
        list.add(node.val);
        // 访问过的节点数+1
        start++;
        // 正在访问的节点的左孩子入队列(如果不为空的话)
        if (node.left != null) {
            queue.offer(node.left);
        }
        //正在访问的节点的右孩子入队列(如果不为空的话)
        if (node.right != null) {
            queue.offer(node.right);
        }
        //判断是否该层的节点全访问了没有
        if (start == end) {
            //从新开始计数下一层的访问个数
            start = 0;
            //下一层的节点个数
            end = queue.size();
            lists.add(list);
            list = new ArrayList<Integer>();
        }
    }
    return lists;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 2. 实现 Singleton 3. 数组中重复的数字 4. 二维数组中的查找 5. 替换空格 6. 从尾到...
    Observer_____阅读 3,198评论 0 1
  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 6,678评论 0 13
  • 树 记录《剑指offer》中所有关于树的题目,以及LeetCode中的相似题目。 相关题目列表 题目 树是一种最常...
    wenmingxing阅读 1,561评论 2 13
  • 剑指offer第二版总结——基于牛客网 1. 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增...
    小张同学_loveZY阅读 2,771评论 0 3
  • 二叉树专题系列 1. 镜像类 题目描述: 操作给定的二叉树,将其变换为源二叉树的镜像。 Ying的解法: 二叉树的...
    mying_三丘阅读 521评论 0 0

友情链接更多精彩内容