#include <iostream>
#include <stack>
using namespace std;
struct Node{
int data;
Node *left, *right;
Node (int val) {
data = val;
left = NULL;
right = NULL;
}
};
void zigzag(Node *root) {
if(root == NULL) return;
stack<Node*> current;
stack<Node*> next;
bool leftToRight = true;
current.push(root);
while(!current.empty()) {
Node *temp = current.top();
current.pop();
if(temp) {
cout << temp->data << " ";
if(leftToRight) {
if(temp->left)
next.push(temp->left);
if(temp->right)
next.push(temp->right);
}
else {
if(temp->right)
next.push(temp->right);
if(temp->left)
next.push(temp->left);
}
}
if(current.empty()) {
leftToRight = !leftToRight;
swap(current, next);
}
}
}
int main() {
/*
12
/ \
9 15
/ \
5 10
*/
Node *root = new Node(12);
root->left = new Node(9);
root->right = new Node(15);
root->left->left = new Node(5);
root->left->right = new Node(10);
zigzag(root);
cout << endl;
return 0;
}
ICAjaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxzdGFjaz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBOb2RlewogICAgaW50IGRhdGE7CiAgICBOb2RlICpsZWZ0LCAqcmlnaHQ7CiAgICBOb2RlIChpbnQgdmFsKSB7CiAgICAgICAgZGF0YSA9IHZhbDsKICAgICAgICBsZWZ0ID0gTlVMTDsKICAgICAgICByaWdodCA9IE5VTEw7CiAgICB9Cn07Cgp2b2lkIHppZ3phZyhOb2RlICpyb290KSB7CiAgICBpZihyb290ID09IE5VTEwpIHJldHVybjsKCiAgICBzdGFjazxOb2RlKj4gY3VycmVudDsKICAgIHN0YWNrPE5vZGUqPiBuZXh0OwoKICAgIGJvb2wgbGVmdFRvUmlnaHQgPSB0cnVlOwogICAgY3VycmVudC5wdXNoKHJvb3QpOwoKICAgIHdoaWxlKCFjdXJyZW50LmVtcHR5KCkpIHsKICAgICAgICBOb2RlICp0ZW1wID0gY3VycmVudC50b3AoKTsKICAgICAgICBjdXJyZW50LnBvcCgpOwoKICAgICAgICBpZih0ZW1wKSB7CiAgICAgICAgICAgIGNvdXQgPDwgdGVtcC0+ZGF0YSA8PCAiICI7CgogICAgICAgICAgICBpZihsZWZ0VG9SaWdodCkgewogICAgICAgICAgICAgICAgaWYodGVtcC0+bGVmdCkKICAgICAgICAgICAgICAgICAgICBuZXh0LnB1c2godGVtcC0+bGVmdCk7CiAgICAgICAgICAgICAgICBpZih0ZW1wLT5yaWdodCkKICAgICAgICAgICAgICAgICAgICBuZXh0LnB1c2godGVtcC0+cmlnaHQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaWYodGVtcC0+cmlnaHQpCiAgICAgICAgICAgICAgICAgICAgbmV4dC5wdXNoKHRlbXAtPnJpZ2h0KTsKICAgICAgICAgICAgICAgIGlmKHRlbXAtPmxlZnQpCiAgICAgICAgICAgICAgICAgICAgbmV4dC5wdXNoKHRlbXAtPmxlZnQpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmKGN1cnJlbnQuZW1wdHkoKSkgewogICAgICAgICAgICBsZWZ0VG9SaWdodCA9ICFsZWZ0VG9SaWdodDsKICAgICAgICAgICAgc3dhcChjdXJyZW50LCBuZXh0KTsKICAgICAgICB9CiAgICB9Cn0KCmludCBtYWluKCkgewogICAgLyoKICAgICAgICAxMgogICAgICAgLyBcCiAgICAgIDkgICAxNQogICAgIC8gXAogICAgNSAgMTAKICAgICovCiAgICBOb2RlICpyb290ID0gbmV3IE5vZGUoMTIpOwogICAgcm9vdC0+bGVmdCA9IG5ldyBOb2RlKDkpOwogICAgcm9vdC0+cmlnaHQgPSBuZXcgTm9kZSgxNSk7CiAgICByb290LT5sZWZ0LT5sZWZ0ID0gbmV3IE5vZGUoNSk7CiAgICByb290LT5sZWZ0LT5yaWdodCA9IG5ldyBOb2RlKDEwKTsKCiAgICB6aWd6YWcocm9vdCk7ICAKICAgIGNvdXQgPDwgZW5kbDsKCiAgICByZXR1cm4gMDsKfQo=