2010-12-13 5 views
-1

Я пытаюсь написать функцию поиска двоичного дерева поиска для значения и вернуть значение TreeNode со значением.Binary Search Tree Questions

struct TreeNode 
{ 
    int value; 
    struct TreeNode *pLeft, *pRight; 
}; 
TreeNode* SearchTree(int query); 

(Для любого узла: this->pLeft содержит узлы меньше this->value, this->pRight содержит узлы больше, то this->value)

+0

Хорошо. Так что у вас есть до сих пор? –

+0

Код, который у меня есть, уже указан. –

+2

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

ответ

2

это было бы что-то вдоль линий:

treenode* SearchTree(int query, treenode* node) 
{ 
    if(node == NULL) 
     return NULL; 
    else if(query == node->value) 
     return node; 
    else if(query < node->value) 
     return SearchTree(query, node->pLeft); 
    else if(query > node->value) 
     return SearchTree(query, node->pRight); 
    else 
     return NULL; 
} 

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

+0

Две элементарные ошибки здесь: 1. У вашей функции нет критерия завершения, если запрос не находится в дереве. (Я знаю, что вы упомянули об этом в своем комментарии, но это более важно, чем это - оно должно быть в коде.) 2. Вы не возвращаете значение. – TonyK

+1

TonyK, ok Я изменил код, чтобы проверить критерии завершения, у него может быть свое собственное завершение, я просто предполагаю, что теперь все его листовые узлы будут NULL. вопрос попросил вернуть TreeNode со значением, а не с самим значением. – han

+0

Я немного упростил этот код. В нем отсутствовали некоторые операторы 'return' и назывались' this' в тех местах, где он должен был быть «node». – asveikau

0

Вы решаете это с помощью рекурсии.

  • Вам необходимо завершить работу.

  • Вам также понадобится рекурсивный шаг, который проверяет узел дерева и вызывает его.

Я предлагаю вам использовать NULL в качестве возвращаемого значения, если оно не найдено.

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