2015-03-26 10 views
-6

Я пытаюсь сравнить все листья, чтобы вернуть самое низкое значение дерева, у меня нет основной функции, просто скрипта для вставки значений, поэтому, к сожалению, я не могу его отладить.Найти самый низкий лист в двоичном дереве

tpNoArvore * findLowest(tpNoArvore * pNo){ 
    tpNoArvore * left; 
    tpNoArvore * right; 
    tpNoArvore * res; 

    if (!pNo) return NULL; /* if */ 

    left = findLowest(pNo->pNoL); 
    right = findLowest(pNo->pNoR); 
    if(isLeaf(pNo)) 
     return pNo; 
    } /* if */ 

    if(!left){ 
     return right; 
    } /* if */ 

    if(!right){ 
     return left; 
    } /* if */ 


    return (left->Valor < right->Valor) ? left : right ; 

} 

Итак, в основном то, что я пытаюсь достичь здесь, - это сравнить две стороны каждого узла, чтобы найти самый низкий.

+2

Вы не сказали нам, что хотите, в довольно многих граничных случаях. Например, что вы хотите сделать в случае галстука (два или более узлов на одной глубине)? –

+0

где находится «Доблесть»? (Это ключ, чтобы сделать эту работу) – DrKoch

ответ

1

Кажется странным, что ваш код возвращает указатель. Я бы ожидал чего-то вроде:

// Assume valor is int 
int findLowest(tpNoArvore * pNo){ 

    if (!pNo) exit(1); /* fatal error */ 

    // If this is a leaf just return its value 
    if(isLeaf(pNo)) return pNo->Valor; 

    // Not a leaf 

    // Find the lowest value in left part of tree 
    int leftValor = findLowest(pNo->pNoL); 

    // Find the lowest value in right part of tree 
    int rightValor = findLowest(pNo->pNoR); 

    // Return the lowest of leftValue ans rightValue 
    return (leftValor < rightValor) ? leftValor : rightValor ; 

} 

Но, возможно, у меня есть неверный вопрос.

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