二叉排序树

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;

以上是关于二叉排序树的主要内容,如果未能解决你的问题,请参考以下文章

二叉排序树(BST)删除节点

红黑树与AVL树

计算二叉搜索树中节点的等级

在二叉查找树中插入节点

数据结构54:平衡二叉树(AVL树)

为啥我的代码不能在二叉搜索树中正确执行预排序?