@@ -630,35 +630,29 @@ \subsubsection{迭代版}
630630public:
631631 vector<vector<int> > zigzagLevelOrder(TreeNode *root) {
632632 vector<vector<int> > result;
633- if (nullptr == root) return result;
634-
635- queue<TreeNode*> q;
636- bool left_to_right = true; //left to right
637- vector<int> level; // one level's elements
638-
639- q.push(root);
640- q.push(nullptr); // level separator
641- while (!q.empty()) {
642- TreeNode *cur = q.front();
643- q.pop();
644- if (cur) {
645- level.push_back(cur->val);
646- if (cur->left) q.push(cur->left);
647- if (cur->right) q.push(cur->right);
648- } else {
649- if (left_to_right) {
650- result.push_back(level);
651- } else {
652- reverse(level.begin(), level.end());
653- result.push_back(level);
654- }
655- level.clear();
656- left_to_right = !left_to_right;
633+ queue<TreeNode*> current, next;
634+ bool left_to_right = true;
635+
636+ if(root == nullptr) {
637+ return result;
638+ } else {
639+ current.push(root);
640+ }
657641
658- if (q.size() > 0) q.push(nullptr);
642+ while (!current.empty()) {
643+ vector<int> level; // elments in one level
644+ while (!current.empty()) {
645+ TreeNode* node = current.front();
646+ current.pop();
647+ level.push_back(node->val);
648+ if (node->left != nullptr) next.push(node->left);
649+ if (node->right != nullptr) next.push(node->right);
659650 }
651+ if (!left_to_right) reverse(level.begin(), level.end());
652+ result.push_back(level);
653+ left_to_right = !left_to_right;
654+ swap(next, current);
660655 }
661-
662656 return result;
663657 }
664658};
0 commit comments