2015-04-08 3 views
0
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

Проблема в том, что вы пропускаете несколько уровней через ваш обход. В вашем примере if(temp_node->left->left) будет генерировать ошибку ошибки сегментации, если temp_node->left не существует. Таким образом, для каждой итерации вы должны вместо этого выбрать if(temp_node->left) и if(temp_node->right).

Для детальной реализации вы можете обратиться к here.

Смежные вопросы