Пробую работать с деревьями, но что-то не получается.
Вот, есть таблица с символами и кодами (послед-ть 0 и 1).
Почему после процедуры CreateVertex root указывает по последний добавленный лист дерева.
Здравствуйте, Аноним, Вы писали:
А>Пробую работать с деревьями, но что-то не получается. А>Вот, есть таблица с символами и кодами (послед-ть 0 и 1). А>Почему после процедуры CreateVertex root указывает по последний добавленный лист дерева.
А>Помогите. А>
А что это mallocи в тексте мелькают? Перепиши на new-delete. Или жеткая потребность именно в С?
Да и в функцию оформи кусок
p=p->left;
if (p==NULL){
p = (vertex*)malloc(sizeof(vertex));
p->>left = NULL;
p->>right = NULL;
}
p->>data = 0;
p->>alpha = s[j];
Увидишь — самому проще станет разбираться.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: Работа с деревьями
От:
Аноним
Дата:
18.02.04 16:00
Оценка:
Здравствуйте, Vamp, Вы писали:
А>>Почему после процедуры CreateVertex root указывает по последний добавленный лист дерева. V>Потому, что передается по ссылке.
А>Пробовал, в root ничего не записывается.
Так ты определись, что тебе надо. А то тебе и записывается плохо, и не записывается нехорошо.
Да здравствует мыло душистое и веревка пушистая.
Re[6]: Работа с деревьями
От:
Аноним
Дата:
18.02.04 16:41
Оценка:
Здравствуйте, Vamp, Вы писали:
А>>Пробовал, в root ничего не записывается. V>Так ты определись, что тебе надо. А то тебе и записывается плохо, и не записывается нехорошо.
Дак дело в том, что при использовании ссылки root после завершения процедуры имеет адрес последнего добавленного листа, а не используя ссылку дерево вообще в root не запивается.
Re[7]: Работа с деревьями
От:
Аноним
Дата:
18.02.04 17:08
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Vamp, Вы писали:
А>>>Пробовал, в root ничего не записывается. V>>Так ты определись, что тебе надо. А то тебе и записывается плохо, и не записывается нехорошо.
А>Дак дело в том, что при использовании ссылки root после завершения процедуры имеет адрес последнего добавленного листа, а не используя ссылку дерево вообще в root не запивается.
Здравствуйте, <Аноним>, Вы писали:
А>Пробую работать с деревьями, но что-то не получается. А>Вот, есть таблица с символами и кодами (послед-ть 0 и 1). А>Почему после процедуры CreateVertex root указывает по последний добавленный лист дерева.
Сильно не вникал, но это сразу бросается в глаза:
case'0':
{ p=p->>left;
if (p==NULL)
{ p = (vertex*)malloc(sizeof(vertex));
p->>left = NULL;
p->>right = NULL;
}
...
В выделенных строках ты постоянно записываешь адрес листа, не сохраняя при этом предыдущий адрес.
То есть при первом вызове " AddCode(root,table[i].code); " у тебя root перепишеться новым адресом, а
этот " root = (vertex*)malloc(sizeof(vertex)); " утекет
Надо что-нибудь вроде этого:
А>>Дак дело в том, что при использовании ссылки root после завершения процедуры имеет адрес последнего добавленного листа, а не используя ссылку дерево вообще в root не запивается.
Да у тебя вообще никакого дерева не будет. У тебя будет список с таким алгоритмом. Ты опиши, чего надо то.
Кстати, твой свитч лучше перепиать так:
if (s[j]=='0')
p=p->left;
else if (s[j]=='1')
p=p->right;
else
return;
if (p==NULL){
p = (vertex*)malloc(sizeof(vertex));
p->left = NULL;
p->right = NULL;
p->data = '0'-s[j]; //kindo not portable
p->alpha = s[j];