从上到下打印二叉树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};