跟TCP粘包的解决方式差不多。第一种方法是保存每层的长度,第二种方法是使用分隔符nullptr将每层隔开。

使用第二种方法。

class Solution {
public:
    vector<vector<int> > Print(TreeNode* pRoot) {
        if(!pRoot) return {};
        queue<TreeNode*> que;
        que.push(pRoot); que.push(nullptr);
        vector<vector<int>> res;
        vector<int> vec;
        while(!que.empty()) {
            TreeNode *temp = que.front();
            que.pop();
            if(temp) {
                cout << temp->val << endl;
                vec.push_back(temp->val);
                if(temp->left) que.push(temp->left);
                if(temp->right) que.push(temp->right);
            } else {
                if(!que.empty()) que.push(nullptr);
                res.push_back(vec);
                vec.clear();
            }            
        }
        return move(res);
    }
};