Είμαι αρχάριος να ++ γ και είμαι έχοντας προβλήματα με την εύρεση του ελάχιστου στοιχείου της 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);}
};
Η Inorder, Destroy και οι μέθοδοι Εισάγετε εφαρμόζονται ως εξής:
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();
}
Όπως ίσως παρατηρήσατε, η μέθοδος Inorder υλοποιείται επίσης, ίσως να μπορεί να χρησιμοποιηθεί με κάποιο τρόπο να βοηθήσει να λύσει το πρόβλημά μου ... Συγγνώμη για την κακή αγγλικά μου: /













