二叉排序树
Posted 梦西空
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉排序树相关的知识,希望对你有一定的参考价值。
#include<bits/stdc++.h>
using namespace std;
typedef char typelem;
typedef struct node
typelem data;
struct node *lchild,*rchild;
Bitree;
//初始化一个空树
void Initree(Bitree *(*p))
*p=new Bitree;
(*p)->lchild=(*p)->rchild=NULL;
(*p)->data=0;
//在树中查找元素e1,并把该元素的结点指针返回给e2,成功返回1,失败返回0
int searchtree(Bitree *p,typelem e1,Bitree *(*e2))
if(p==NULL||p->data==0)
return 0;
if(p->data==e1)
*e2=p;
return 1;
if(p->data>=e1)
return searchtree(p->lchild,e1,e2);
else
return searchtree(p->rchild,e1,e2);
//插入
int insertree(Bitree *(*p),typelem a)
if(*p==NULL)
(*p)=new Bitree;
(*p)->lchild=(*p)->rchild=NULL;
(*p)->data=a;
return 1;
if(a<=(*p)->data)
return insertree(&((*p)->lchild),a);
else
return insertree(&((*p)->rchild),a);
//创建一个二叉排序树,将a数组插入其中
void treecreate2(Bitree *p,typelem a[],int len)
int i;
p->data=a[0];
for(i=1;i<len;i++)
insertree(&p,a[i]);
void printree(Bitree *p)//
if(p!=NULL)
printree(p->lchild);
cout<<p->data<<' ';
printree(p->rchild);
//删除结点
void deletenode(Bitree *(*p))
Bitree *p1=*p,*p2;
if((*p)->lchild==NULL)//左子树为空的情况
*p=(*p)->rchild;
free(p1);
else if((*p)->rchild==NULL)//右子树为空的情况
*p=(*p)->lchild;
free(p1);
else//左右子树都存在的情况
p2=p1->lchild;
while(p2->rchild)
p1=p2;
p2=p2->rchild;
(*p)->data=p2->data;
if(p1==*p)
p1->lchild=p2->lchild;
else
p1->rchild=p2->lchild;
free(p2);
//删除树中的a(a存在于树中)
void Bitreedelete(Bitree *(*p),typelem a)
if(p==NULL||(*p)->data==0) return;
if((*p)->data==a)
deletenode(p);
return;
if(a<=(*p)->data)
Bitreedelete(&((*p)->lchild),a);
else
Bitreedelete(&((*p)->rchild),a);
int main()
typelem input[]='B','A','C','E','D','F','H','G';
Bitree *T,*e;
Initree(&T);
treecreate2(T,input,8);
Bitreedelete(&T,'D');
printree(T);
// cout<<'\\n'<<searchtree(T,'B',&e)<<'\\n';
// cout<<e->data;
以上是关于二叉排序树的主要内容,如果未能解决你的问题,请参考以下文章