2011-01-24 80 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);} 
}; 

中序,破壞和插入方法是這樣實現的:

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

最小值應該是最左邊的值。 – 2011-01-24 18:56:31

回答

4

最小值將是在上面的代碼中調用Action的第一個值。儘可能向左走,並找到最小值...

+0

這確實在我腦海中,但我不知道如何實現該想法... – sikac 2011-01-24 19:03:53