#include <iostream>
using namespace std;
# define maxSize 10
typedef struct BTNode{
int data;
struct BTNode *lchild;
struct BTNode *rchild;
}BTNode;
void createBTree(BTNode *&p)
{
p = (BTNode*)malloc(sizeof(BTNode));
p->data = 1;
BTNode *n2, *n3, *n4, *n5 ;
n2 = (BTNode*)malloc(sizeof(BTNode));
n3 = (BTNode*)malloc(sizeof(BTNode));
n4 = (BTNode*)malloc(sizeof(BTNode));
n5 = (BTNode*)malloc(sizeof(BTNode));
n2->data = 2;
n3->data = 4;
n4->data = 3;
n5->data = 5;
p->lchild = n2;
p->rchild = n3;
n2->lchild = n4;
n2->rchild = n5;
n3->lchild = n3->rchild = NULL;
n4->lchild = n4->rchild = NULL;
n5->lchild = n5->rchild = NULL;
}
void inorderNonrecursion(BTNode *p){
if (p != NULL){
BTNode *q;
BTNode *stack[maxSize];
int top = -1;
q = p;
while (top != -1 || q != NULL)
{
while (q != NULL)
{
stack[++top] = q;
q = q->lchild;
}
if (top != -1)
{
q = stack[top--];
cout << q->data << endl;
q = q->rchild;
}
}
}
}
int main()
{
BTNode *p;
createBTree(p);
inorderNonrecursion(p);
return 0;
}