diff --git a/Binary Tree in cpp/binaryTreeZigzagLevelOrderTraversal.cpp b/Binary Tree in cpp/binaryTreeZigzagLevelOrderTraversal.cpp new file mode 100644 index 00000000..e12762ee --- /dev/null +++ b/Binary Tree in cpp/binaryTreeZigzagLevelOrderTraversal.cpp @@ -0,0 +1,45 @@ +/** + * Definition for a binary tree node. + * struct TreeNode { + * int val; + * TreeNode *left; + * TreeNode *right; + * TreeNode() : val(0), left(nullptr), right(nullptr) {} + * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} + * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} + * }; + */ +class Solution { +public: + vector> zigzagLevelOrder(TreeNode* root) { + if(!root) return {}; + vector> result; + deque Q; + Q.push_back(root); + bool reverse = true; + + while(!Q.empty()){ + int count = Q.size(); + vector level_nodes; + deque dQ; + + for(int i = 0; ival); + Q.pop_front(); + if(reverse){ + if(n->left) dQ.push_front(n->left); + if(n->right) dQ.push_front(n->right); + + }else{ + if(n->right) dQ.push_front(n->right); + if(n->left) dQ.push_front(n->left); + } + } + Q.insert(Q.end(), dQ.begin(), dQ.end()); + result.push_back(level_nodes); + reverse = !reverse; + } + return result; + } +};