没什么难度的题。用两个vector v1和v2, v2作为临时向量保存v1中节点的孩子,即v1节点下一层的节点,然后交换v1和v2。
这道题有memory limit,如果把所有节点都存下来再层次遍历的话 应该是 空间复杂度 会过不了。
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int> > zigzagLevelOrder(TreeNode *root) {
if(root==NULL)
return vector<vector<int> >();
vector<vector<int> > res;
bool flag = true;
vector<TreeNode *> v1;
vector<TreeNode *> v2;
v1.push_back(root);
while(!v1.empty()){
res.push_back(vector<int>());
if(flag){
for(int i=0;i<v1.size();++i)
res.back().push_back(v1[i]->val);
flag=false;
}
else{
for(int i=v1.size()-1;i>=0;--i)
res.back().push_back(v1[i]->val);
flag=true;
}
for(int i=0;i<v1.size();++i){
if(v1[i]->left)
v2.push_back(v1[i]->left);
if(v1[i]->right)
v2.push_back(v1[i]->right);
}
v1.swap(v2);
v2.clear();
}
return res;
}
};