У меня есть двоичное дерево, в котором у конечных узлов есть символ («a», «r» и т. Д.).Я хочу найти определенный узел в этом дереве и записать маршрут, когда я его нашел.(Это алгоритм Хаффмана). Проблема в том, что мой код просто печатает только последние 2 подчиненных маршрута (В случае с символом "p" мой код просто указывает "10", и он должен вывести "110". Слово: paddle . Маршрут начинается с корня.
![enter image description here](https://i.stack.imgur.com/T8RMH.jpg)
Я думаю, что проблема в рекурсии. Возможно, что это двойная рекурсия, потому чтоЯ нахожу в левом узле и в правом узле.
struct nodo{
int frecuencia;
nodo *izq, *der, *next;
char letra;
int binario; // binario it is "0" or "1"
int usado;
};
bool recorrerarbol(nodo *n, char letradada, string &cadena){
if(n!=NULL){
if(n->letra==letradada){
cadena=to_string(n->binario)+cadena; //n->binario it is 0 or 1
return true;
}
else{
if(recorrerarbol(n->izq,letradada,cadena)){
cadena=to_string(n->binario)+cadena;
}
else{
if(recorrerarbol(n->der,letradada,cadena)){
cadena=to_string(n->binario)+cadena;
}}
}
}
return false;
}
Ожидаемый результат: для "a": 111 для "p": 110 для"d": 0 Что я получаю: "d": 00"p": 10 "a": 11 Как видите, проблема в том, что учитываются только последние 2 уровня роста. Спасибо