void printLevelOrder(struct node* root)
{
int rear, front;
struct node **queue = createQueue(&front, &rear);
struct node *temp_node = root;
while(temp_node)
{
printf("%d ", temp_node->data);
/*Enqueue left child */
if(temp_node->left->left)
enQueue(queue, &rear, temp_node->left->left);
/*Enqueue right child */
if(temp_node->left->right)
enQueue(queue, &rear, temp_node->left->right);
if(temp_node->right->left)
enQueue(queue, &rear, temp_node->right->left);
/*Enqueue right child */
if(temp_node->right->right)
enQueue(queue, &rear, temp_node->right->right);
/*Dequeue node and make it temp_node*/
temp_node = deQueue(queue, &front);
}
}
我在上面的代码中遇到了分段错误错误。我正在使用级别顺序遍历来在树中打印备用级别。
请帮忙。逻辑似乎对我来说是正确的。
答案 0 :(得分:0)
问题在于您通过遍历跳过某些级别。在您的示例中,如果if(temp_node->left->left)
不存在,temp_node->left
将生成细分错误错误。因此,对于每次迭代,您应该检查if(temp_node->left)
和if(temp_node->right)
。
有关详细实施,您可以参考here。