美文网首页
剑指 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