美文网首页
剑指 offer 笔记 60 | 把二叉树打印成多行

剑指 offer 笔记 60 | 把二叉树打印成多行

作者: ProudLin | 来源:发表于2019-11-15 16:49 被阅读0次

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

    思路分析
    1、初始化一个队列,初始元素为root
    2、遍历元素,每次首先获取当前队列的节点个数,即当前队列的size
    3、弹出size次元素,则本次遍历到的均为本层的元素
    4、每次弹出元素的同时,把元素的左右孩子加入队列,以便下次遍历

    解释说明:

    ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
    
        ArrayList<ArrayList<Integer>> ret = new ArrayList<>();
        Queue<TreeNode> queue = new LinkedList<>();
    
        queue.add(pRoot);
    
        while (!queue.isEmpty()) {
            // 当前层的节点值,按照应该打印的顺序添加到列表中
            ArrayList<Integer> list = new ArrayList<>();
            // 当前层的节点数量
            int cnt = queue.size();
            while (cnt-- > 0) {
                // 弹出本层元素
                TreeNode node = queue.poll();
                if (node == null)
                    continue;
                list.add(node.val);
              // 添加左右孩子节点到队列
                queue.add(node.left);
                queue.add(node.right);
            }
            if (list.size() != 0)
              // 当前行元素遍历的列表加入res
                ret.add(list);
        }
        return ret;
    }
    

    相关文章

      网友评论

          本文标题:剑指 offer 笔记 60 | 把二叉树打印成多行

          本文链接:https://www.haomeiwen.com/subject/mmwtictx.html