File tree Expand file tree Collapse file tree 1 file changed +36
-0
lines changed
algorithms/cpp/binaryTreeZigzagLevelOrderTraversal Expand file tree Collapse file tree 1 file changed +36
-0
lines changed Original file line number Diff line number Diff line change @@ -64,6 +64,13 @@ struct TreeNode {
6464vector<TreeNode*> TreeToArray_level_order (TreeNode* root);
6565
6666vector<vector<int > > zigzagLevelOrder (TreeNode *root) {
67+ if (random ()%2 ){
68+ return zigzagLevelOrder1 (root);
69+ }
70+ return zigzagLevelOrder2 (root);
71+ }
72+
73+ vector<vector<int > > zigzagLevelOrder1 (TreeNode *root) {
6774 vector<vector<int > > result;
6875 vector<TreeNode*> tree = TreeToArray_level_order (root);
6976
@@ -120,6 +127,35 @@ vector<TreeNode*> TreeToArray_level_order(TreeNode* root){
120127 return result;
121128}
122129
130+ vector<vector<int > > zigzagLevelOrder2 (TreeNode *root) {
131+ vector<vector<int > > vv;
132+ if (root == NULL ) return vv;
133+
134+ int level = 0 ;
135+ TreeNode *last = root;
136+ queue<TreeNode*> q;
137+
138+ q.push (root);
139+ vv.push_back (vector<int >());
140+ while (!q.empty ()) {
141+ TreeNode *p = q.front ();
142+ q.pop ();
143+
144+ vv[level].insert (level%2 ? vv[level].begin () : vv[level].end (), p->val );
145+ if (p->left ) q.push (p->left );
146+ if (p->right ) q.push (p->right );
147+
148+ if (p == last) {
149+ level++;
150+ last = q.back ();
151+ vv.push_back (vector<int >());
152+ }
153+ }
154+ vv.pop_back ();
155+
156+ return vv;
157+ }
158+
123159void printTree_level_order (TreeNode *root)
124160{
125161 queue<TreeNode*> q;
You can’t perform that action at this time.
0 commit comments