这种迭代的二叉树遍历不断给我分段错误,我不确定如何将树中当前变量的指针分配给弹出的元素,因为它们是两种不同的类型。
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);
}发布于 2018-10-29 05:55:48
现在,您正在将一个整数推送到堆栈,然后尝试弹出并将其分配给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);
}这是你最终需要修复的东西,但我不确定这是否能修复你的分段错误。
https://stackoverflow.com/questions/53036257
复制相似问题