题目描述
从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层打印到一行。
数据范围
树中节点的数量 [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; } };
欢迎大家在评论区交流~