Найти Узел, Имеющий Ближайший К Этому Значению Ключ

13.04.2012
12
0
#1
всем привет.
вот код, который ищет среднее значение всех ключей дерева, помогите найти узел, имеющий ближайший к этому значению ключ.
C++:
#include<iostream.h>
struct node
{
int Key;
int Count;
node *Left;
node *Right;
};

class TREE
{
private:
node *duk; //Корень дерева.
public:

TREE() { duk = NULL; }
node **GetDuk() { return &duk; }
node *Tree (int, node **); 
void Vyvod (node **, int);
void GetSum (node **);
int sum,n;
};

void main ()
{
TREE A;
int n;

cout<<"vvedite kol vershin -...\n"; cin>>n;
cout<<"vvedite klychi...\n";
A.Tree (n,A.GetDuk()); A.Vyvod (A.GetDuk(),0);



A.sum = 0;
A.n = 0;
A.GetSum(A.GetDuk());
float srednee = (float)A.sum/A.n;

cout<<"srednee = "<<srednee<<endl;
}

node *TREE::Tree (int n,node **p)
// Построение идеально сбалансированного
//		  дерева с n вершинами.
// *p - указатель на корень дерева.
{
node *now;
int x,nl,nr;

now = *p;
if (n==0) *p = NULL;
else
{
nl = n/2; nr = n - nl - 1;
cin>>x;
now = new(node);
(*now).Key = x;
Tree (nl,&((*now).Left));
Tree (nr,&((*now).Right));
*p = now;
}







return 0;
}

void TREE::Vyvod (node **w,int l)
// Изображение бинарного дерева, заданного
// указателем *w на экране дисплея.
{
if (*w!=NULL)
{
Vyvod (&((**w).Right),l+1);
for (int i=1; i<=l; i++) cout<<"  ";
cout<<(**w).Key<<endl;
Vyvod (&((**w).Left),l+1);
}
}
void TREE::GetSum (node **w)
{
if (*w!=NULL)
{
GetSum (&((**w).Right));
sum+=(**w).Key;
n++;
GetSum (&((**w).Left));
}
}