二叉排序树问题·······麻烦大家围观一小下

muyu1990 2010-11-26 12:06:55
/*二叉排序树设计与实现*/
#include"iostream.h"
#include"stdlib.h"
typedef struct bstnode
{int key;
struct bstnode *lchild,*rchild;
}BSTNode,BSTree;
//查找关键字对应的数据
BSTNode *search(BSTree &bt,int k)
{int counter=0;
BSTree p;
p=bt;
while(p!=NULL)
{counter++;
if(p->key==key) return p;//查找成功返回
else
{if(key<p->key) p=p->lchild;//在左子树中查找
else p->rchild;//在右子树中查找
}
}
cout<<"search times ="<<counter<<endl;//输出次数
return 0;//查找失败
}
//
void Createtree(BSTree &root,int data[])
{BSTree p;//新建节点
BSTree current;//当前节点
BSTree parent;//父节点
int i;
for(i=0;i<n;i++)
{p=(BSTree)malloc(sizeof(BSTNode));//创建节点
p->key=data[i];
p->rchild=NULL;
p->lchild=NULL;
if(root==NULL) root=p;//根节点为空
else
{current=root;//目前的位置在根节点
while(current!=NULL)//当前节点为最低层结束循环
{parent=current;//记录父节点
if(current->key>=data[i])
current=current->lchild;
else
current=current->rchild;
}
//连起父与子节点
if(parent->key>data[i])
parent->lchild=p;
else parent->rchild=p;
}
}
}
void main()
{BSTree root=NULL;
BSTree p;
int data[n];
int key;
cout<<"intput the data of the tree:"<<endl;
for(int i=0;i<n;i++)
cin>>data[i];
Createtree(root,data);
cout<<"intput key:"<<endl;
cin>>key;
p=search(root,key);
if(p)
cout<<"the foinded key is:"<<p->key<<endl;
else cout<<"not found"<<endl;
}


出现了如下问题 麻烦大家解决一小下 不明白是哪里出了错
:\MSDev98\MyProjects\3\3.cpp(13) : error C2676: binary '!=' : 'struct bstnode' does not define this operator or a conversion to a type acceptable to the predefined operator
D:\MSDev98\MyProjects\3\3.cpp(13) : fatal error C1903: unable to recover from previous error(s); stopping compilation
执行 cl.exe 时出错.

3.obj - 1 error(s), 0 warning(s)

...全文
197 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengyouya123 2010-11-27
  • 打赏
  • 举报
回复
你代码抄的有许多问题,我一编译全是错误。
BSTree p; //这句应该改成指针BSTree *p;
同意楼上的说法“问题太多”,建议你看看数据结构随书带的光盘,哪个软件不错还带模拟的
sxq310 2010-11-27
  • 打赏
  • 举报
回复
好心人编译也不容易啊,一路改别面目全非
vc_zj 2010-11-27
  • 打赏
  • 举报
回复
typedef struct bstnode
{
int key;
struct bstnode *lchild,*rchild;
}BSTNode,*BSTree;
这里的BSTree应该定义为指针
vc_zj 2010-11-27
  • 打赏
  • 举报
回复
1)int data[n]; 这个里面的n是输入的个数, 需要在外界宏定义一下
2)//查找关键字对应的数据
//查找关键字对应的数据
BSTNode *search(BSTree &bt,int k)
{
int counter=0;
BSTree p;
p=bt;
while(p!=NULL)
{
counter++;
if(p->key==k/*ey*/)
return p;//查找成功返回
else
{
if(k/*ey*/<p->key) p=p->lchild;//在左子树中查找
else p->rchild;//在右子树中查找
}
}
cout<<"search times ="<<counter<<endl;//输出次数
return 0;//查找失败
}
看一下这个里面的key,传的参数是k,不是key.
3) 上面两个错误改了就能运行了,但是里面可能有个逻辑错误,再检查检查, 运行结果有不对的时候
djh512 2010-11-26
  • 打赏
  • 举报
回复
问题太多。。
你找别人的例子 看看 感觉lz不是算法的问题
是基础有很多问题
muyu1990 2010-11-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 truelance 的回复:]
BSTree p; p不是指针,怎么能和NULL比较呢
[/Quote]
我想过也是P的问题 BSTree *p 这样也出错 到底怎样该才能过?
熊熊大叔 2010-11-26
  • 打赏
  • 举报
回复
BSTree p; p不是指针,怎么能和NULL比较呢

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧