Thanks Jai, following is C++ implementation
void inOrderTraversalWithOutStack(struct node* node) {
std::stack<struct node*> stk;
struct node* current = node;
while(current) {
while(current) {
stk.push(current);
current = current->left;
}
while(current == NULL && !stk.empty()) {
current = stk.top();
stk.pop();
printf("%d \t", current->data);
current = current->right;
}
}
}