这种遍历二叉树的遍历一直给我分段错误,我不确定如何将树中当前变量的指针分配给从中弹出的元素,因为它们是两种不同的类型。
struct BTnode{
int data;
struct BTnode* left;
struct BTnode* right;
struct BTnode* parent;
};
typedef struct BTnode BTnode_t;
typedef struct {
LL_t* list;
} stack_t; //stack is created with a Linked List
void preOrderIter(BTnode_t* root)
{
stack_t* s = stack_create();
stack_push(s, root->data);
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->data);
if ( current->left != NULL)
stack_push(s, current->left->data);
}
free(s);
}
答案 0 :(得分:0)
现在,您将一个整数压入堆栈,然后尝试弹出并将其分配给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);
}
这是您最终需要解决的问题,但是我不确定这是否可以解决您的细分错误。