从上到下打印二叉树II(剑指Offer-32.2)
题面
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
例如: 给定二叉树:
[3,9,20,null,null,15,7]
,1 3 2 / \ 3 9 20 4 / \ 5 15 7
返回:
1[ 2 [3], 3 [9,20], 4 [15,7] 5]
限制
1节点总数 <= 1000
思路
BFS层序遍历,加个标记,当一层遍历完时,队列里即是下一层,使用q.back()更新标记即可。
代码
1/**
2 * Definition for a binary tree node.
3 * struct TreeNode {
4 * int val;
5 * TreeNode *left;
6 * TreeNode *right;
7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
8 * };
9 */
10class Solution {
11public:
12 vector<vector<int>> levelOrder(TreeNode* root) {
13 vector<vector<int> > ans;
14 vector<int> row;
15 if(root==NULL) return ans;
16
17 queue<TreeNode *>q;
18 q.push(root);
19 TreeNode *end = root;
20
21 while(!q.empty()){
22 TreeNode *t = q.front(); q.pop();
23 row.push_back(t->val);
24 if(t->left)
25 q.push(t->left);
26 if(t->right)
27 q.push(t->right);
28 if(t == end){
29 ans.push_back(row);
30 row.clear();
31 end = q.back();
32 }
33 }
34 return ans;
35 }
36};