如何找到BST的最小元素?

时间:2011-01-24 18:54:50

标签: c++ element minimum binary-search-tree

我是c ++的初学者,在查找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);}
};

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方法实现如下:

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

您可能已经注意到,InOrder方法也已实现,也许它可以某种方式用于帮助解决我的问题...抱歉我的英文不好:/

1 个答案:

答案 0 :(得分:4)

最小值将是在上面的代码中调用Action的第一个值。尽可能向左走,你会找到最小的价值......