#include <iostream>
#include<bits/stdc++.h>
using namespace std;
typedef struct node{
int data;
struct node *lchild,*rchild;
}treenode;
typedef struct{
treenode *base;
treenode *top;
}mystack;
void init(mystack &m){
m.base=new treenode[100];
m.top=m.base;
}
void push(mystack &m,treenode x){
*m.top++=x;
}
void pop(mystack &m){
m.top--;
}
treenode gettop(mystack m){
return *(m.top-1);
}
int main()
{
mystack m;
init(m);
treenode *root,*a,*b,*c,*p;
root=new treenode;
root->lchild=NULL;
root->rchild=NULL;
a=new treenode;
a->lchild=NULL;
a->rchild=NULL;
b=new treenode;
b->lchild=NULL;
b->rchild=NULL;
c=new treenode;
c->lchild=NULL;
c->rchild=NULL;
root->data=1;
a->data=2;
b->data=3;
c->data=4;
root->lchild=a;
root->rchild=b;
a->lchild=c;
p=root;
while(p!=NULL||m.top!=m.base){
if(p){
push(m,*p);
cout<<p->data<<" ";
p=p->lchild;
}else{
treenode q=gettop(m);
pop(m);
//cout<<q.data<<" ";
p=q.rchild;
}
}
//cout << "Hello world!" << endl;
return 0;
}