#include <bits/stdc++.h>
using namespace std;
class Node{
public:
int data;
Node* left,*right;
Node(int data){
this->data = data;
left=right=NULL;
}
};
void printPreorder(Node* root){
if(!root) return;
cout<<root->data<<" ";
printPreorder(root->left);
printPreorder(root->right);
}
void printInorder(Node* root){
if(!root) return;
printInorder(root->left);
cout<<root->data<<" ";
printInorder(root->right);
}
void addbigger(Node* root, int *count){
// we have to do a reverse post order traversal
if(!root) return;
addbigger(root->right,count);
root->data = root->data + *count;
*count = root->data;
addbigger(root->left,count);
}
int height(Node* root){
if(root==NULL) return 0;
return (max(height(root->left),height(root->right))+1);
}
void levelorder(Node* root,bool oddeven){
if(!root) return;
Node* temp=NULL;
deque <Node*> dq;
dq.push_front(root);
while(!dq.empty()){
int siz = dq.size();
if(oddeven){
while(siz--){
temp = dq.front();
dq.pop_front();
cout<<temp->data<<" ";
if(temp->left) dq.push_back(temp->left);
if(temp->right) dq.push_back(temp->right);
}
}
else{
while(siz--){
temp = dq.back();
dq.pop_back();
cout<<temp->data<<" ";
if(temp->right) dq.push_front(temp->right);
if(temp->left) dq.push_front(temp->left);
}
}
oddeven= !oddeven;
cout<<endl;
}
return;
}
int main() {
Node* root = new Node(3);
root->left = new Node(2);
root->right = new Node(4);
root->left->left = new Node(1);
root->right->right = new Node(5);
root->left->right = new Node(10);
root->right->left = new Node(20);
levelorder(root,true);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBOb2RlewoJcHVibGljOgoJaW50IGRhdGE7CglOb2RlKiBsZWZ0LCpyaWdodDsKCU5vZGUoaW50IGRhdGEpewoJCXRoaXMtPmRhdGEgPSBkYXRhOwoJCWxlZnQ9cmlnaHQ9TlVMTDsKCX0KfTsKdm9pZCBwcmludFByZW9yZGVyKE5vZGUqIHJvb3QpewoJaWYoIXJvb3QpIHJldHVybjsKCQoJY291dDw8cm9vdC0+ZGF0YTw8IiAiOwoJcHJpbnRQcmVvcmRlcihyb290LT5sZWZ0KTsKCXByaW50UHJlb3JkZXIocm9vdC0+cmlnaHQpOwp9Cgp2b2lkIHByaW50SW5vcmRlcihOb2RlKiByb290KXsKCWlmKCFyb290KSByZXR1cm47CgkKCXByaW50SW5vcmRlcihyb290LT5sZWZ0KTsKCWNvdXQ8PHJvb3QtPmRhdGE8PCIgIjsKCXByaW50SW5vcmRlcihyb290LT5yaWdodCk7Cn0KCnZvaWQgYWRkYmlnZ2VyKE5vZGUqIHJvb3QsIGludCAqY291bnQpewoJLy8gd2UgaGF2ZSB0byBkbyBhIHJldmVyc2UgcG9zdCBvcmRlciB0cmF2ZXJzYWwKCWlmKCFyb290KSByZXR1cm47CgkKCWFkZGJpZ2dlcihyb290LT5yaWdodCxjb3VudCk7Cglyb290LT5kYXRhID0gcm9vdC0+ZGF0YSArICpjb3VudDsKCSpjb3VudCA9IHJvb3QtPmRhdGE7CglhZGRiaWdnZXIocm9vdC0+bGVmdCxjb3VudCk7Cn0KCmludCBoZWlnaHQoTm9kZSogcm9vdCl7CglpZihyb290PT1OVUxMKSByZXR1cm4gMDsKCQoJcmV0dXJuIChtYXgoaGVpZ2h0KHJvb3QtPmxlZnQpLGhlaWdodChyb290LT5yaWdodCkpKzEpOwp9Cgp2b2lkIGxldmVsb3JkZXIoTm9kZSogcm9vdCxib29sIG9kZGV2ZW4pewoJaWYoIXJvb3QpIHJldHVybjsKCU5vZGUqIHRlbXA9TlVMTDsKCWRlcXVlIDxOb2RlKj4gZHE7CglkcS5wdXNoX2Zyb250KHJvb3QpOwoJd2hpbGUoIWRxLmVtcHR5KCkpewoJCWludCBzaXogPSBkcS5zaXplKCk7CglpZihvZGRldmVuKXsKCQl3aGlsZShzaXotLSl7CgkJCXRlbXAgPSBkcS5mcm9udCgpOwoJCQlkcS5wb3BfZnJvbnQoKTsKCQkJY291dDw8dGVtcC0+ZGF0YTw8IiAiOwoJCQlpZih0ZW1wLT5sZWZ0KSBkcS5wdXNoX2JhY2sodGVtcC0+bGVmdCk7CgkJCWlmKHRlbXAtPnJpZ2h0KSBkcS5wdXNoX2JhY2sodGVtcC0+cmlnaHQpOwoJCX0KCQl9CgllbHNlewoJCXdoaWxlKHNpei0tKXsKCQkJdGVtcCA9IGRxLmJhY2soKTsKCQkJZHEucG9wX2JhY2soKTsKCQkJY291dDw8dGVtcC0+ZGF0YTw8IiAiOwoJCQlpZih0ZW1wLT5yaWdodCkgZHEucHVzaF9mcm9udCh0ZW1wLT5yaWdodCk7CgkJCWlmKHRlbXAtPmxlZnQpIGRxLnB1c2hfZnJvbnQodGVtcC0+bGVmdCk7CgkJfQoJfQoJb2RkZXZlbj0gIW9kZGV2ZW47Cgljb3V0PDxlbmRsOwoJfQoJcmV0dXJuOwp9CgppbnQgbWFpbigpIHsKCU5vZGUqIHJvb3QgPSBuZXcgTm9kZSgzKTsgCiAgICByb290LT5sZWZ0ICAgICAgICAgICAgID0gbmV3IE5vZGUoMik7IAogICAgcm9vdC0+cmlnaHQgICAgICAgICA9IG5ldyBOb2RlKDQpOyAKICAgIHJvb3QtPmxlZnQtPmxlZnQgICAgID0gbmV3IE5vZGUoMSk7IAogICAgcm9vdC0+cmlnaHQtPnJpZ2h0ID0gbmV3IE5vZGUoNSk7CiAgICByb290LT5sZWZ0LT5yaWdodCA9IG5ldyBOb2RlKDEwKTsKICAgIHJvb3QtPnJpZ2h0LT5sZWZ0ID0gbmV3IE5vZGUoMjApOwogICAgCiAgICBsZXZlbG9yZGVyKHJvb3QsdHJ1ZSk7CiAgCiAgICAKCXJldHVybiAwOwp9