1. 首页
  2. 剑指offer经典面试题

[剑指 Offer 第 2 版第 32_1 题] “把二叉树打印成多行”做题记录

[剑指 Offer 第 2 版第 32_1 题] “把二叉树打印成多行”做题记录

第 32-2 题:分行从上往下打印二叉树

传送门:分行从上往下打印二叉树牛客网 online judge 地址

从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层打印到一行。

样例:

输入如下图所示二叉树 [8, 12, 2, null, null, 6, null, 4, null, null, null] 8 / \ 12 2 / 6 / 4 输出:[[8], [12, 2], [6], [4]]

分析:与“不分行从上往下打印二叉树”的区别就在于,在从队列中取出元素的之前,先看看队列中有多少元素,然后依次将这些元素全部取出来。取出来以后,再将左右子树的根结点加入队列。

Python 代码:

  # Definition for a binary tree node.
    class TreeNode(object):
        def __init__(self, x):
            self.val = x
            self.left = None
            self.right = None


    class Solution(object):
        def printFromTopToBottom(self, root):
            """
            :type root: TreeNode
            :rtype: List[List[int]]
            """
            if root is None:
                return []
            queue = [root]
            res = []
            while queue:
                size = len(queue)
                cur_list = []
                for _ in range(size):
                    top = queue.pop(0)
                    cur_list.append(top.val)
                    if top.left:
                        queue.append(top.left)
                    if top.right:
                        queue.append(top.right)
                res.append(cur_list)
            return res

Java 代码:

  import java.util.ArrayList;
    import java.util.LinkedList;


    class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;

        public TreeNode(int val) {
            this.val = val;
        }

    }

    // 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
    // 层序遍历
    public class Solution {
        ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
            ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
            if (pRoot == null) {
                return res;
            }
            LinkedList<TreeNode> queue = new LinkedList<>();
            queue.addLast(pRoot);

            while (!queue.isEmpty()) {
                int size = queue.size();

                ArrayList<Integer> curLevel = new ArrayList<>();
                for (int i = 0; i < size; i++) {
                    TreeNode top = queue.removeFirst();
                    curLevel.add(top.val);
                    if (top.left != null) {
                        queue.addLast(top.left);
                    }
                    if (top.right != null) {
                        queue.addLast(top.right);
                    }

                }
                res.add(curLevel);
            }
            return res;
        }
    }

作者:liweiwei1419

来源:https://liweiwei1419.github.io/sword-for-offer/


JS中文网,Javascriptc中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,是给开发者用的 Hacker News,技术文章由为你筛选出最优质的干货,其中包括:Android、iOS、前端、后端等方面的内容。目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。

本文著作权归作者所有,如若转载,请注明出处

转载请注明:文章转载自「 Java极客技术学习 」https://www.javajike.com

标题:[剑指 Offer 第 2 版第 32_1 题] “把二叉树打印成多行”做题记录

链接:https://www.javajike.com/article/3311.html

« [剑指 Offer 第 2 版第 15 题] “二进制中1的个数”做题记录
[剑指 Offer 第 2 版第 32_3 题] “按之字形顺序打印二叉树”做题记录»

相关推荐

QR code