#include <iostream>
#include <stack>
using namespace std;
struct node{
int data;
struct node* lchild;
struct node* rchild;
};
typedef struct node Node;
void inOrderTraverse(Node* root){
Node* p = root;
stack<Node*> s;
while(p||!s.empty()){
if(p){
s.push(p);
p = p->lchild;
}else{
p = s.top();
s.pop();
cout<<p->data<<" ";
p = p->rchild;
}
}
}
int main(){
Node node0={0,NULL,NULL};
Node node1={1,NULL,NULL};
Node node4={4,NULL,NULL};
Node node2={2,NULL,NULL};
Node node3={3,NULL,NULL};
Node node5={5,NULL,NULL};
Node node6={6,NULL,NULL};
Node node7={7,NULL,NULL};
Node node8={8,NULL,NULL};
node0.lchild = &node1;
node0.rchild = &node4;
node1.lchild = &node2;
node1.rchild = &node3;
node4.lchild = &node5;
node4.rchild = &node8;
node5.lchild = &node6;
node5.rchild = &node7;
inOrderTraverse(&node0);
}