这里使用的是正常层序遍历再翻转的方法,这样在实现上更简单,官方解也是这么写的。实际上双端队列的方法其实更符合题目的原意。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| class Solution { public: vector<vector<int>> zigzagLevelOrder(TreeNode* root) { deque<TreeNode*> st; vector<vector<int>> result; if(root != nullptr) st.push_back(root); int depth = 0; while(!st.empty()) { int size = st.size(); vector<int> temp; for(int i = 0; i < size; i++) { TreeNode* node = st.back(); st.pop_back(); temp.push_back(node->val); if(node->left) { st.push_front(node->left); } if(node->right) { st.push_front(node->right); }
} if(depth%2 == 1) reverse(temp.begin(),temp.end()); result.push_back(temp); depth++; } return result; } };
|