和之前的层次遍历是一样的,只不过要在最后处理数组的时候,下一个层次利用reverse反转就好
1 class Solution { 2 public: 3 vector<vector<int> > zigzagLevelOrder(TreeNode* root) { 4 vector<vector<int> > v; 5 vector<int> level; 6 if (root == NULL) 7 return v; 8 if (root ->left == NULL && root ->right == NULL) 9 { 10 level.push_back(root->val); 11 v.push_back(level); 12 return v; 13 } 14 queue<TreeNode*> q; 15 q.push(root); 16 TreeNode *trail,*cur; // trail record the last item in each level 17 trail = cur = root; 18 19 while(!q.empty()) 20 { 21 TreeNode* pointer = q.front(); 22 q.pop(); 23 level.push_back(pointer->val); 24 if (pointer->left != NULL) 25 { 26 cur = pointer->left; 27 q.push(pointer->left); 28 } 29 if (pointer->right != NULL) 30 { 31 cur = pointer->right; 32 q.push(pointer->right); 33 } 34 if (pointer == trail) 35 { 36 trail = cur; 37 v.push_back(level); 38 level.clear(); 39 } 40 } 41 42 for(int i=0;i<v.size();i++) 43 if(i%2) 44 reverse(v[i].begin(),v[i].end()); 45 46 return v; 47 } 48 49 };
浙公网安备 33010602011771号