Skip to content

Commit

Permalink
Added solution - LeetHub
Browse files Browse the repository at this point in the history
  • Loading branch information
sainikcodes24x7 committed Aug 8, 2023
1 parent 7a9a249 commit 9cf5bfb
Showing 1 changed file with 172 additions and 0 deletions.
172 changes: 172 additions & 0 deletions ZigZag Tree Traversal - GFG/zig-zag-tree-traversal.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
//{ Driver Code Starts
//Initial Template for C++


#include <bits/stdc++.h>
using namespace std;
#define MAX_HEIGHT 100000

// Tree Node
struct Node {
int data;
Node* left;
Node* right;
};

// Utility function to create a new Tree Node
Node* newNode(int val) {
Node* temp = new Node;
temp->data = val;
temp->left = NULL;
temp->right = NULL;

return temp;
}


// Function to Build Tree
Node* buildTree(string str) {
// Corner Case
if (str.length() == 0 || str[0] == 'N') return NULL;

// Creating vector of strings from input
// string after spliting by space
vector<string> ip;

istringstream iss(str);
for (string str; iss >> str;) ip.push_back(str);

// Create the root of the tree
Node* root = newNode(stoi(ip[0]));

// Push the root to the queue
queue<Node*> queue;
queue.push(root);

// Starting from the second element
int i = 1;
while (!queue.empty() && i < ip.size()) {

// Get and remove the front of the queue
Node* currNode = queue.front();
queue.pop();

// Get the current node's value from the string
string currVal = ip[i];

// If the left child is not null
if (currVal != "N") {

// Create the left child for the current node
currNode->left = newNode(stoi(currVal));

// Push it to the queue
queue.push(currNode->left);
}

// For the right child
i++;
if (i >= ip.size()) break;
currVal = ip[i];

// If the right child is not null
if (currVal != "N") {

// Create the right child for the current node
currNode->right = newNode(stoi(currVal));

// Push it to the queue
queue.push(currNode->right);
}
i++;
}

return root;
}


// } Driver Code Ends
//User function Template for C++
/*Structure of the node of the binary tree is as
struct Node {
int data;
Node *left;
Node *right;
Node(int val) {
data = val;
left = right = NULL;
}
};
*/

class Solution{
public:
//Function to store the zig zag order traversal of tree in a list.
vector <int> zigZagTraversal(Node* root)
{
// Code here
if(!root){
return {};
}
vector<int>v;
int level=0;
queue<Node*>q;
q.push(root);
while(!q.empty()){
int sz=q.size();
vector<int>temp;
for(int i=0;i<sz;i++){
auto curr=q.front();
q.pop();
temp.push_back(curr->data);
if(curr->left){
q.push(curr->left);
}
if(curr->right){
q.push(curr->right);
}
}
if(level%2!=0){
reverse(temp.begin(),temp.end());
}
for(int i=0;i<temp.size();i++){
v.push_back(temp[i]);
}
level++;
}
return v;
}
};

//{ Driver Code Starts.

/* Driver program to test size function*/



int main() {


int t;
scanf("%d ", &t);
while (t--) {
string s, ch;
getline(cin, s);

Node* root = buildTree(s);

vector<int> ans;
Solution ob;
ans = ob.zigZagTraversal(root) ;

for (int i = 0; i < ans.size(); i++)
cout << ans[i] << " ";

cout << endl;

}
return 0;
}

// } Driver Code Ends

0 comments on commit 9cf5bfb

Please sign in to comment.