#include <stdio.h>
#include "windows.h"
typedef char E;
struct twoTree {
E element;
struct twoTree *leftNode;
struct twoTree *rightNode;
};
typedef struct twoTree *TreeNode;
void inOrder(TreeNode root) {
if (root == NULL) return;
inOrder(root->leftNode);
printf("%c", root->element);
inOrder(root->rightNode);
}
struct LNode {
TreeNode element;
struct LNode *Next;
};
typedef struct LNode *Node;
BOOL initStack(Node node) {
node->Next = NULL;
}
BOOL pushStack(Node head, TreeNode tree) {
Node node = malloc(sizeof(struct LNode));
if (node == NULL) return 0;
node->element = tree;
node->Next = head->Next;
head->Next = node;
return 1;
}
BOOL isEmpty(Node node) {
return node->Next == NULL;
}
TreeNode popStack(Node head) {
Node tmp = head->Next;
head->Next = tmp->Next;
TreeNode e = tmp->element;
free(tmp);
return e;
}
void inOrder2(TreeNode root) {
struct LNode stack;
initStack(&stack);
do {
while (root) {
pushStack(&stack, root);
root = root->leftNode;
}
root = popStack(&stack);
printf("%c", root->element);
root = root->rightNode;
} while (root || !isEmpty(&stack));
}
int main() {
TreeNode a = malloc(sizeof(struct twoTree));
TreeNode b = malloc(sizeof(struct twoTree));
TreeNode c = malloc(sizeof(struct twoTree));
TreeNode d = malloc(sizeof(struct twoTree));
TreeNode e = malloc(sizeof(struct twoTree));
TreeNode f = malloc(sizeof(struct twoTree));
a->element = 'A';
b->element = 'B';
c->element = 'C';
d->element = 'D';
e->element = 'E';
f->element = 'F';
a->leftNode = b;
a->rightNode = c;
b->leftNode = d;
b->rightNode = e;
c->rightNode = f;
c->leftNode = NULL;
d->leftNode = d->rightNode = NULL;
e->leftNode = e->rightNode = NULL;
f->leftNode = f->rightNode = NULL;
inOrder2(a);
};