2011-01-24 9 views
0

私はC++の初心者で、BSTの最小要素を見つけることに問題があります。 BSTは、この方法で実装されていますBSTの最小要素の検索方法は?

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);} 
}; 

順序どおり、破壊およびInsertメソッドは次のように実装されています:

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; 
} 
} 

そして、私は番号を印刷するために使用する主な機能と機能は次のようになりこの:

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(); 
} 

お気づきの通り、順序どおりの方法は、また、実装されている多分私の問題を解決するために、いくつかの方法で使用することができます...私の悪い英語のため申し訳ありません:/

+1

最小値は、左端の値にしてください。 –

答えて

4

最小値は、上記のコードでActionを呼び出す最初の値になります。可能な限り左に移動し、最小値を見つけます。

+0

それは私の心を渡りましたが、私はその考え方をどのように実装するのか分かりません... – sikac

+0

while(Current){Previous = Current;現在の=現在の→左; }前は最小です – vmpstr

関連する問題