普通的完全二叉树的搜索效率如何啊???

c1sdn20003 2012-05-16 08:51:54
建立了一棵完全二叉树,不知道搜索算法如何写?很普通的二叉树。

问题1:实现搜索算法

问题2: 搜索普通的完全二叉树,效率和数组相比,如何?? 普通数组(没有排序什么的)


//这是树节点
struct node
{
node* lchild;
node* rchild;
int data;

node():lchild(NULL),rchild(NULL){}
node(int val):data(val),lchild(NULL),rchild(NULL){}

};

//二叉树

class BiTree
{
node* root;
public:

......................//省去部分函数,节省篇幅

//查找

void find(int data) const //查找,接口
{
search(root,data);
}



private:
void serarch(node* p, int data) const //这个私有函数,实现查找data,如何书写??
{
static int pos=0;
if(p->data==data)
{
cout<<"找到了,在顺序表中,其索引为:"<<pos<<endl;
return;
}

}
};



普通的二叉树的搜索和数组相比谁快????


时间复杂度 递归这种,不会评估,很压抑。 感觉不像迭代循环好评估............



...全文
674 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
c1sdn20003 2012-05-16
  • 打赏
  • 举报
回复
算法实现啊

serarch函数
xiaoqiao_82 2012-05-16
  • 打赏
  • 举报
回复
如果树是有序的,且平衡的,那么搜索效率应该和数组一样。都是log(n)复杂度。
c1sdn20003 2012-05-16
  • 打赏
  • 举报
回复
大侠们,那个search怎么实现啊???
W170532934 2012-05-16
  • 打赏
  • 举报
回复
如果你的树是无序的,那么你只能搜索整棵树才能得到结果,效率应该是比数组来的低。如果想用树来做搜索的话,可以尝试下:平衡二叉树,红黑树等。
下面的链接是我写的一个平衡二叉树。
http://blog.csdn.net/w170532934/article/details/7571281
凯撒VX 2012-05-16
  • 打赏
  • 举报
回复
只能用遍历,有前序遍历,中序遍历,后序遍历
void preorder(node* t) { //先根遍历
if(t==NULL) return;
cout<<t−>data<<endl; //访问根
preorder(t−>lchild); //先根遍历左子树
preorder(t−>rchild); //先根遍历右子树
}
中根遍历
void inorder(node* t) { //中根遍历
if(t==NULL) return;
inorder(t−>lchild); //中根遍历左子树
cout<<t−>data<<endl; //访问根
inorder(t−>rchild); //中根遍历右子树
}
后根遍历
void postorder(node* t) {//后根遍历
if(t==NULL) return;
postorder(t−>lchild); //后根遍历左子树
postorder(t−>rchild); //后根遍历右子树
cout<<t−>data<<endl; //访问根
}
c1sdn20003 2012-05-16
  • 打赏
  • 举报
回复
没人啊
liangbch 2012-05-16
  • 打赏
  • 举报
回复
如果这个2叉数是排序的,对应的数数组也是排序的。在其2叉数中搜索和在数组中搜索其复杂是相同,性能也基本相同。

如果这个2叉数是未排序的,对应的数数组也是未排序的。那么,在数组中搜索可采用顺序搜索,在2叉树中搜索只能用遍历了。在数组中顺序搜索,代码简单,访问的内存的地址是连续的,cache的命中率接近100%,其速度会明显比在树中快,但时间复杂度与在数中搜索是一样的。

另外,如果你这个2叉数是有序的,我不知到你这个2叉数的具体表示方式是什么,是AVL搜索树呢,2分查找树呢,还是红黑树。
一叶之舟 2012-05-16
  • 打赏
  • 举报
回复
肯定是数组要比树快,可以用二分查找查询。

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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