2016-05-12 4 views
0

У меня есть дерево со структурами. Мне нужно найти min, число которого max (задано).Поиск определенного элемента в дереве (C)

Item this_word (link h, int max){ 
     Item word; 
     if (h == NULL) 
      return 0; 
     if (h->item->acc == max){ 
      word = h->item; 
      this_word(h->l, max); 
     } 
     else{ 
      this_word(h->l, max); 
      this_word(h->r, max); 
     } 
     return word; 
    } 

Но я получаю ошибку сегментации ..

+0

Является ли ссылка переменной указателем? Потому что вы обращаетесь к нему как к одному – BackDoorNoBaby

+0

Где именно ваш segfault? Запустили ли вы программу в отладчике? Пожалуйста, покажите определение типов 'Item' и' link'. – Martin

+1

@BackDoorNoBaby typedefs are evil –

ответ

0

Вашей код, когда ошибка сегментации держат h!= NULL и h->item->acc == max. В этом случае выполняется ветка else и возвращается слово, которое ранее не было установлено. Вы можете решить это, правильно присвоив значение слову.

Item this_word (link h, int max){ 
     Item word; 
     if (h == NULL) { 
      return 0; 
     } 
     if (h->item->acc == max) { 
      word = h->item; 
      this_word(h->l, max); 
     } else { 
      // assign a certain value to word 
      this_word(h->l, max); 
      this_word(h->r, max); 
     } 
     return word; 
    } 

Насколько я могу видеть, что ваш код немного странно, что это так, потому что никто не может полностью понять, что вы пытаетесь на основе вашего вопроса. Чтобы улучшить качество anser, задайте лучший вопрос (добавьте код, объясните контекст и т. Д.)

+0

Я сделал это и я все еще получаю ошибку сегментации. Строка имеет строку и число. Дерево организовано через строки, и я хочу вернуть структуру, которая имеет указанное число. Когда есть два типа «один» и «компьютер» с этим номером, я хочу вернуть «компьютер», поскольку он находится в алфавитном порядке – Heather

+1

@Heather, поэтому дерево сортируется по отношению к строкам. И вы хотите получить «самую маленькую» строку, которая имеет определенный номер? Вы должны обязательно добавить это к своему вопросу! Правильно ли инициализировано дерево? Может ли быть вызвано segfault, если возвращается NULL? Я думаю, нам нужно больше кода .. – jboockmann

+0

Я использовал 'void init() { head = NULL; } 'для инициализации дерева. Когда NULL возвращается туда? – Heather

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