首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

查寻元素的位置

2012-06-24 
查找元素的位置C/C++ code普通的完全二叉树是基于数组建立的, 目前的搜索算法不能做到 可以搜索到下标。。。。

查找元素的位置

C/C++ code
普通的完全二叉树是基于数组建立的, 目前的搜索算法不能做到 可以搜索到下标。。。。。我想实现的功能,可以返回目标元素所在数组的索引。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:    BiTree():root(NULL){}    ~BiTree(){    Clear(); }        node* find(int data) const        //这个函数目前不能返回data所在的数组中的索引位置,我想获得其位置,怎么修改啊??    {        return search(root,data);    }private:    node* search(node* p, int data) const    {        node* pret;        if(p==NULL)return p;        if(p->data==data)            return p;        //左子树搜索        if(p->lchild)        {            pret=search(p->lchild,data);            if(pret)                return pret;        }        if(p->rchild)        {            pret=search(p->rchild,data);            if(pret)                return pret;        }        return NULL;    }};


[解决办法]
2叉树和数组完全是2个概念。普通的2叉树的节点是动态分配的,各个节点的地址没有必然的联系,而数组是有序表。在你的代码中,2叉树就是一颗普通的树,节点的地址用指针表示,怎么可以和数组扯上关系了。

如果你的2叉数是用数组来表示的,节点的地址不用指针,而用数组下标(和堆排序中的堆一样)来表示,返回的自然是数组下标了。

一个逻辑概念(树,栈)可以有不同的实现,不用的实现有不同的特点。如果A种实现方法有特性Af,B种实现了有特性Bf,非要在A种实现中实现B种实现才可能有的特性,费力也可能做不到。

举个不恰当的例子。广告有2种实现,A种广告是平面媒体(发行在书上的),B种广告是电视媒体。A种广告的寻址方式是书名和页数,比如计算机世界月刊第5期18页,B种广告的寻址方式是电视台名和时间段。比如,湖南卫视晚上8点30分。如果你非要在看电视的时候,想用书名和页数的寻址方式来得到某个广告的地址,无异于缘木求鱼。

热点排行