二叉树查找

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

二叉树查找

//树表的查找

#include

using namespace std;

typedef struct node{

int key;

struct node *lchild;

struct node *rchild;

}bstnode;//二叉树节点

//二叉树的生成

int insert(bstnode *&p,int k)

{

if(p==NULL)//原来的数时空树

{

p=new bstnode;

p->key=k;

p->lchild=NULL;

p->rchild=NULL;

return 1;

}

else if(k==p->key)

return 0;//树中存在相同的节点,返回0

else if(kkey)

return insert(p->lchild,k);

else

return insert(p->rchild,k);

}

//二叉树的创建

bstnode *creat(int *a,int n)

{

bstnode *p=NULL;//初始化空数

int i=0;

while(i

{

insert(p,a[i]);

i++;

}

return p;

}

//二叉树的查找函数

bstnode * search_bst(bstnode *p,int k)

{

if(p==NULL||p->key==k)

return p;

if(kkey)

return search_bst(p->lchild,k);

else

return search_bst(p->rchild,k);

}

bool search(bstnode *p,int k)

{

bstnode *bt;

bt=search_bst(p,k);

if(bt==NULL)

return 0;

else

return 1;

}

//二叉树的删除操作

void delete1(bstnode*p,bstnode*&r)//当被删除的节点p有左右节点的时候的删除{

bstnode *q;

if(r->rchild!=NULL)

delete1(p,r->rchild);//递归找到最右下节点

else

{

p->key=r->key;//将r的关键字幅值

q=r;

r=r->lchild;//直接将其左子树的根节点放到被删除节点的位置上

delete q;

}

}

void delete_node(bstnode *&p)//删除节点

{

bstnode *q;

if(p->rchild==NULL)//没有右子树

{

q=p;

p=p->lchild;

delete q;

}

else if(p->lchild==NULL)

{

q=p;

p=p->rchild;

delete q;

}

else

delete1(p,p->lchild);

}

bool delete_bst(bstnode *&p,int k) {

if(p==NULL)

return 0;

else

{

if(kkey)

return delete_bst(p->lchild,k);

else if(k>p->key)

return delete_bst(p->rchild,k);

else//找到了要删除的节点

{

delete_node(p);

return 1;

}

}

}

int main()

{

int a[7]={11,7,16,3,9,26,18};

bstnode *p;

p=creat(a,7);

cout<

}

//二分法插入排序

void binary_sort(int *a,int n)

{

int i,j,low,high,mid;

int temp;

for(i=1;i

{

temp=a[i];

low=0;

high=i-1;

while(low<=high)

{

mid=(low+high)/2;

if(temp

high=mid-1;

else

low=mid+1;

}

for(j=i-1;j>=high;j--)

a[j+1]=a[j];

a[high+1]=temp;//插入}

}

相关文档
最新文档