The below functions assume that a stack of type pointer to Node is already created which supports push and pop operations.
Preorder Traversal :
voidpreorderTraversal(struct Node *ptr) {// A stack to keep track of visited nodesstruct Stack s;// Iterate until pointer is not NULL or stack is not emptywhile (ptr !=NULL||!isEmpty(s)) {if (ptr) {printf("%d\t",ptr -> data);// Push current node address to stackpush(&s, p); ptr =ptr -> left; } else { ptr =pop(&s); ptr =ptr -> right; } }}
Inorder Traversal :
voidinorderTraversal(struct Node *ptr) {// A stack to keep track of visited nodesstruct Stack s;// Iterate until pointer is not NULL or stack is not emptywhile (ptr !=NULL||!isEmpty(s)) {if (ptr) {// Push current node address to stackpush(&s, p); ptr =ptr -> left; } else { ptr =pop(&s);printf("%d\t",ptr -> data); ptr =ptr -> right; } }}
Postorder Traversal :
voidpostorderTraversal(struct Node *ptr) {// A stack to keep track of visited nodesstruct Stack s;// Iterate until pointer is not NULL or stack is not emptywhile (ptr !=NULL||!isEmpty(s)) {if (ptr) {// Push current node address to stackpush(&s, p); ptr =ptr -> left; } else { ptr =pop(&s); ptr =ptr -> right;printf("%d\t",ptr -> data); } }}