#include<iostream>
#include<stack>
using namespace std;
struct node{
int data;
node *left;
node *right;
};
node *getNewNode(int data){ //method for creating new node
node *newNode = new node();
newNode->data=data;
newNode->left=newNode->right = NULL;
return newNode;
}
node *Insert(node *root , int data){ //Method for insert new data in tree
if(root == NULL){
root = getNewNode(data);
}
else if(data>root->data){
root->right = Insert(root->right,data);
}
else{
root->left = Insert(root->left,data);
}
return root;
}
void Print(node *root){ //Method for preorder traversal with recursion
if(root == NULL){
return;
}
cout<<root->data<<" ";
Print(root->left);
Print(root->right);
}
void preOdr(node *root){ //Without recursion
stack<node*> stk;
stk.push(root);
while (!stk.empty()) {
root=stk.top();
stk.pop();
cout<<root->data<<" "; // get and show top of stack
if(root->right) // then push the childern
stk.push(root->right);
if(root->left)
stk.push(root->left);
}
}
int main(){
node *root = NULL;
root = Insert(root,10);
root = Insert(root,6);
root = Insert(root,15);
root = Insert(root,3);
root = Insert(root,9);
root = Insert(root,11);
root = Insert(root,17);
root = Insert(root,11);
root = Insert(root,62);
root = Insert(root,135);
root = Insert(root,30);
root = Insert(root,98);
root = Insert(root,117);
root = Insert(root,176);
cout<<"Print"<<endl;
Print(root);
cout<<"Print-end"<<endl;
cout<<endl;
cout<<"Preo"<<endl;
preOdr(root);
cout<<"Preoend"<<endl;
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHN0YWNrPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IG5vZGV7CgppbnQgZGF0YTsKbm9kZSAqbGVmdDsKbm9kZSAqcmlnaHQ7Cgp9OwoKbm9kZSAqZ2V0TmV3Tm9kZShpbnQgZGF0YSl7ICAgLy9tZXRob2QgZm9yIGNyZWF0aW5nIG5ldyBub2RlCgpub2RlICpuZXdOb2RlID0gbmV3IG5vZGUoKTsKbmV3Tm9kZS0+ZGF0YT1kYXRhOwpuZXdOb2RlLT5sZWZ0PW5ld05vZGUtPnJpZ2h0ID0gTlVMTDsKcmV0dXJuIG5ld05vZGU7Cgp9Cgpub2RlICpJbnNlcnQobm9kZSAqcm9vdCAsIGludCBkYXRhKXsgICAgIC8vTWV0aG9kIGZvciBpbnNlcnQgbmV3IGRhdGEgaW4gdHJlZQoKaWYocm9vdCA9PSBOVUxMKXsKICAgIHJvb3QgPSBnZXROZXdOb2RlKGRhdGEpOwp9CmVsc2UgaWYoZGF0YT5yb290LT5kYXRhKXsKICAgIHJvb3QtPnJpZ2h0ID0gSW5zZXJ0KHJvb3QtPnJpZ2h0LGRhdGEpOwp9CmVsc2V7CiAgICByb290LT5sZWZ0ID0gSW5zZXJ0KHJvb3QtPmxlZnQsZGF0YSk7Cn0KCnJldHVybiByb290OwoKfQoKdm9pZCBQcmludChub2RlICpyb290KXsgIC8vTWV0aG9kIGZvciBwcmVvcmRlciB0cmF2ZXJzYWwgd2l0aCByZWN1cnNpb24KCglpZihyb290ID09IE5VTEwpewogICAgCXJldHVybjsKCX0KCiAJY291dDw8cm9vdC0+ZGF0YTw8IiAiOwoJUHJpbnQocm9vdC0+bGVmdCk7CgoJUHJpbnQocm9vdC0+cmlnaHQpOwoKfQoKdm9pZCBwcmVPZHIobm9kZSAqcm9vdCl7ICAvL1dpdGhvdXQgcmVjdXJzaW9uCgoJc3RhY2s8bm9kZSo+IHN0azsKCXN0ay5wdXNoKHJvb3QpOyAKCXdoaWxlICghc3RrLmVtcHR5KCkpIHsKICAgIAlyb290PXN0ay50b3AoKTsKICAgIAlzdGsucG9wKCk7CiAgICAgICAJY291dDw8cm9vdC0+ZGF0YTw8IiAiOyAgLy8gZ2V0IGFuZCBzaG93IHRvcCBvZiBzdGFjawogICAgICAgCWlmKHJvb3QtPnJpZ2h0KSAgICAgICAgIC8vIHRoZW4gcHVzaCB0aGUgY2hpbGRlcm4gCiAgICAgICAgICAgCXN0ay5wdXNoKHJvb3QtPnJpZ2h0KTsKICAgICAgIAlpZihyb290LT5sZWZ0KSAgICAKICAgICAgICAgICAJc3RrLnB1c2gocm9vdC0+bGVmdCk7CiAgCX0KfQoKaW50IG1haW4oKXsKCm5vZGUgKnJvb3QgPSBOVUxMOwpyb290ID0gSW5zZXJ0KHJvb3QsMTApOwpyb290ID0gSW5zZXJ0KHJvb3QsNik7CnJvb3QgPSBJbnNlcnQocm9vdCwxNSk7CnJvb3QgPSBJbnNlcnQocm9vdCwzKTsKcm9vdCA9IEluc2VydChyb290LDkpOwpyb290ID0gSW5zZXJ0KHJvb3QsMTEpOwpyb290ID0gSW5zZXJ0KHJvb3QsMTcpOwpyb290ID0gSW5zZXJ0KHJvb3QsMTEpOwpyb290ID0gSW5zZXJ0KHJvb3QsNjIpOwpyb290ID0gSW5zZXJ0KHJvb3QsMTM1KTsKcm9vdCA9IEluc2VydChyb290LDMwKTsKcm9vdCA9IEluc2VydChyb290LDk4KTsKcm9vdCA9IEluc2VydChyb290LDExNyk7CnJvb3QgPSBJbnNlcnQocm9vdCwxNzYpOwoKICAgIGNvdXQ8PCJQcmludCI8PGVuZGw7IApQcmludChyb290KTsKICAgIGNvdXQ8PCJQcmludC1lbmQiPDxlbmRsOyAKY291dDw8ZW5kbDsKICAgIGNvdXQ8PCJQcmVvIjw8ZW5kbDsgCnByZU9kcihyb290KTsKICAgIGNvdXQ8PCJQcmVvZW5kIjw8ZW5kbDsgCgoKcmV0dXJuIDA7Cn0=