剑指offer 32. 分行从上往下打印二叉树

简介: 剑指offer 32. 分行从上往下打印二叉树

题目描述

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

数据范围

树中节点的数量 [0,1000]。

样例

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

方法一:BFS O(n)


这道题和上题做法几乎一致,都是用一个队列来存储结点,以当前队列元素个数作为分层依据,然后一个个出队,上道题是将得到的结点放到一行当中,而这道题是将得到的结点分层放到不同的数组当中。所以我们只需要在每层循环时都创建一个新的数组来存储该层的元素,然后再该层遍历结束后放入答案即可。


上题的链接放在这啦,对这一块不太熟悉的小伙伴可以去看看这里的详细讲解,这里我就不重复讲啦~


剑指offer 31. 不分行从上往下打印二叉树

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<vector<int>> printFromTopToBottom(TreeNode* root) {
        if (!root)   return {};
        queue<TreeNode*> q;
        vector<vector<int>> ans;
        q.push(root);
        while (!q.empty())
        {
            int k = q.size();
            vector<int> temp;
            while (k--)
            {
                auto t = q.front();
                temp.push_back(t->val);
                q.pop();
                if (t->left)    q.push(t->left);
                if (t->right)   q.push(t->right);
            }
            ans.push_back(temp);
        }
        return ans;
    }
};

欢迎大家在评论区交流~

目录
相关文章
|
8月前
|
存储 Java C语言
剑指offer(牛客)——从尾到头打印链表
剑指offer(牛客)——从尾到头打印链表
45 1
|
8月前
|
算法
《剑指offer》之从上到下打印二叉树Ⅰ、Ⅱ、Ⅲ
《剑指offer》之从上到下打印二叉树Ⅰ、Ⅱ、Ⅲ
56 0
|
8月前
|
存储
【剑指offer】-把二叉树打印成多行-43/67
【剑指offer】-把二叉树打印成多行-43/67
【剑指offer】-从上往下打印二叉树-22/67
【剑指offer】-从上往下打印二叉树-22/67
|
8月前
|
存储
【剑指offer】- 按之字形顺序打印二叉树-45/67
【剑指offer】- 按之字形顺序打印二叉树-45/67
|
存储 算法 C语言
【C语言刷题】猜名次、猜凶手、杨辉三角、杨氏矩阵、字符串左旋、判断是否为左旋子串
【C语言刷题】猜名次、猜凶手、杨辉三角、杨氏矩阵、字符串左旋、判断是否为左旋子串
84 0
剑指offer 31. 不分行从上往下打印二叉树
剑指offer 31. 不分行从上往下打印二叉树
43 0
剑指offer 33. 之字形打印二叉树
剑指offer 33. 之字形打印二叉树
84 0
剑指offer_二叉树---之字形打印二叉树
剑指offer_二叉树---之字形打印二叉树
62 0
力扣刷题记录——709. 转换成小写字母、771. 宝石与石头、704. 二分查找
力扣刷题记录——709. 转换成小写字母、771. 宝石与石头、704. 二分查找
117 0
力扣刷题记录——709. 转换成小写字母、771. 宝石与石头、704. 二分查找