Как найти минимальный элемент BST? - PullRequest
0 голосов
/ 24 января 2011

Я новичок в c ++ и у меня проблемы с поиском минимального элемента BST. BST реализован следующим образом:

</p> <pre><code>class Tree{ struct Node { int Element; Node *Left, *Right; Node(int Element) : Element(Element), Left(0), Right(0){} }; Node *Root; void InOrder(void(*Action)(int&), Node *Current); void Destroy(Node *Current); public: Tree() : Root(0){} void Insert(int Element); void InOrder(void(*Action)(int&)) {InOrder(Action,Root);} void Destroy() {Destroy(Root);} };

Методы InOrder, Destroy и Insert реализованы следующим образом: </p> <pre><code>void Tree::Insert(int Element) { Node *NewElement = new Node(Element); if(!Root) Root = NewElement; else { Node *Previous, *Current = Root; while(Current) { Previous = Current; if(Element < Current->Element) Current = Current->Left; else Current = Current->Right; } if(Element < Previous->Element) Previous->Left = NewElement; else Previous->Right = NewElement; } } void Tree::InOrder(void(*Action)(int&),Node *Current) { if(Current) { InOrder(Action,Current->Left); Action(Current->Element); InOrder(Action,Current->Right); }

}

void Tree::Destroy(Node *Current) {
 if(Current) {
  Destroy(Current->Left);
  Destroy(Current->Right);
  delete Current;
 }
}

А основная функция и функция, которую я использую для печати чисел, выглядят так: </p> <pre><code>void Print(int &e) { cout << e << endl; } int main() { Tree t; while(1) { int Number; cout << "Insert number (insert 0 to end): "; cin >> Number; if(Number == 0) break; t.Insert(Number); } t.InOrder(Print); t.Destroy(); getch(); }

Как вы могли заметить, метод InOrder также реализован, возможно, его можно использовать для решения моей проблемы ... Извините за плохой английский: /

1 Ответ

4 голосов
/ 24 января 2011

Минимальное значение будет первым значением, которое вызывает Action в приведенном выше коде.Идите налево, насколько сможете, и минимальное значение, которое вы найдете ...

...