在刷leetcode 时候,遇到一个问题,平常在使用vector时,往里面加元素都是直接push_back,vector也会动态的调整自己的内存。但是如果访问一个二维vector时,如果要访问到行号,就需要自己提前给vector通知resize的大小。再访问二维数组前,使用vector.resize()来指定要使用的行号。这样就可以访问行号了。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int> > num;
if(root==NULL) return num;
int height =1;
queue<TreeNode *> que;
que.push(root);
int i =0;
int j = 1;
int last =1;
while(!que.empty()){
TreeNode *temp = que.front();
que.pop();
num.resize(i+1);
num[height-1].push_back(temp->val);
i++;
if(temp->left!=NULL) {
que.push(temp->left);
j++;
}
if(temp->right!=NULL){
que.push(temp->right);
j++;
}
if(i==last){
last =j;
height++;
}
}
for(int i =0;i<num.size();i++){
if(i>>1<<1!=i){
for(int j=0, k=num[i].size()-1;j<k;j++,k--){
int temp = num[i][j];
num[i][j] = num[i][k];
num[i][k] = temp;
}
}
}
num.resize(height-1);
return num;
}
};
顺便记录一下自己做此题的思路,首先队列用来层序遍历,其次再用三个变量i,j,last来记录指针走到哪以及每一层的数目,当i==last的时候 就来增加树的高度。之后在对偶数行进行翻转。