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);
}
}
我在上面的代码中遇到分段错误错误。我正在使用关卡顺序遍历来打印树中的备用关卡。
请帮忙。逻辑对我来说似乎是正确的。
问题是你在遍历过程中跳过了一些关卡。在您的示例中,如果分段错误不存在temp_node->left
if(temp_node->left->left)
将生成该错误。因此,对于每次迭代,都应改为检查if(temp_node->left)
和if(temp_node->right)
。
有关详细实现,您可以参考此处。