/*
5、二叉排序树中,令f = (最大值+最小值) / 2,设计一个算法,
找出距离f值最近、大于f值的结点。复杂度不能为O(n2)。
*/
BTreeNode *GetNode(BTreeNode *root)
{
BTreeNode *p=root;
while(p->pleft!=NULL)
{
p=p->pleft;
}
BTreeNode *q=root;
while(q->pright!=NULL)
{
q=q->pright;
}
int value=(q->data+p->data)/2;
cout<<"最大值:"<<q->data<<endl;
cout<<"最小值:"<<p->data<<endl;
cout<<"(最大值+最小值) / 2:"<<value<<endl;
BTreeNode *res=NULL;
while(root)
{
if(root->data<value)
{
root=root->pright;
}
else
{
res=root;
root=root->pleft;
}
}
return res;
}
void GetNodeTest()
{
int tree[]={1,2,3,4,5,6,7,9,10,11,16};
int low=0,high=sizeof(tree)/sizeof(int)-1;
BTreeNode* root=NULL;
GetTree(tree,low,high,root);
MidTraverse(root);
cout<<endl;
BTreeNode *node=GetNode(root);
cout<<"距离f值最近、大于f值的结点:"<<node->data<<endl;
}