/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ class Solution { public: /** * * @param root TreeNode类 * @return int整型vector<vector<>> */ vector<vector<int> > levelOrder(TreeNode* root) { // write code here //如果是空树直接返回 if(root==nullptr) return vector<vector<int> >(); //使用两个队列,分别储存当前层,和下一层 queue<TreeNode*> q1;//queue容器一般使用pop(),push(),front()四个函数 q1.push(root); queue<TreeNode*> q2; TreeNode* bt; //储存结果 vector<int> temp; vector<vector<int> > res; while(q1.empty()!=1||q2.empty()!=1) { //处理当前层的元素,包括遍历和放入下一层 while(q1.empty()!=1) { bt=q1.front(); q1.pop(); temp.push_back(bt->val); if(bt->left!=nullptr) { q2.push(bt->left); } if(bt->right!=nullptr) { q2.push(bt->right); } } //保存当前层结果 if(temp.empty()!=1) { res.push_back(temp); temp.clear(); } //处理下一层 while(q2.empty()!=1) { bt=q2.front(); q2.pop(); temp.push_back(bt->val); if(bt->left!=nullptr) { q1.push(bt->left); } if(bt->right!=nullptr) { q1.push(bt->right); } } //保存下一层层结果 if(temp.empty()!=1) { res.push_back(temp); temp.clear(); } } return res; } };
使用两个队列循环保存当前层和下一层,并且遍历