Прямо сейчас вы помещаете целое число в стек, а затем пытаетесь открыть и присвоить его BTNode.Вы должны поместить BTNode в стек, поэтому, когда вы его вставите, вы можете получить данные.Я предполагаю, что это должно быть так;
void preOrderIter(BTnode_t* root)
{
stack_t* s = stack_create();
stack_push(s, root);
BTnode_t* current;
while (!stack_is_empty(s))
{
current = stack_pop(s);
printf("%d ", current->data);
if ( current->right != NULL)
stack_push(s, current->right);
if ( current->left != NULL)
stack_push(s, current->left);
}
free(s);
}
Это то, что вам нужно в конечном итоге исправить, но я не уверен, исправит ли это вашу ошибку ошибки сегментации.