Чтобы найти наибольший элемент меньше K в BST

Учитывая двоичное дерево поиска и целое число K, я хотел бы найти самый большой элемент, меньший, чем K.

В приведенном ниже дереве

for K = 13, result = 12
for K = 10, result = 8
for K = 1 (or) 2, result = -1

      10

  5       12

2   8   11  14

Я попробовал следующую логику. Но есть ли лучший способ сделать это?

int findNum(node* node, int K)
{
        if(node == NULL)
        {
                return -1;
        }
        else if(K <= node->data)
        {
                return findNum(node->left,K);
        }
        else if(K > node->data)
        {
                int t = findNum(node->right,K);
                return t > node->data ? t : node->data;
        }

        return -1;
}
18
задан PengOne 13 June 2011 в 18:25
поделиться