这题首先给出树结构。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
为了知道结点是属于哪一层,用一个队列Q来解决这个问题。
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> res;
vector<int> temp;
if(root==NULL) return res;
queue<TreeNode *> Q;
Q.push(root);
TreeNode* level=Q.back();
while(!Q.empty()){
while(Q.front()!=level){
if(Q.front()->left) Q.push(Q.front()->left);
if(Q.front()->right) Q.push(Q.front()->right);
temp.push_back(Q.front()->val);
Q.pop();
}
if(Q.front()->left) Q.push(Q.front()->left);
if(Q.front()->right) Q.push(Q.front()->right);
temp.push_back(Q.front()->val);
level=Q.back();
Q.pop();
res.push_back(temp);
temp.clear();
}
return res;
}
};
直至level指向队首,将其左右子结点压入队列,自身值压入temp,将level指向队尾,即下一层最后一个元素,自身出队。
本层统计完毕,将temp压入res,temp清空,直至队列Q为空,res即为层序遍历结果。