【数据结构】浅谈二叉排序树

【数据结构】浅谈二叉排序树,第1张

【数据结构】浅谈二叉排序树

二叉排序树可以对一组数据进行查找、插入、删除 *** 作。

简介

二叉排序树要么是空二叉树,要么具有如下特点:
如果其根结点有左子树,那么左子树上所有结点的值都小于根结点的值;
如果其根结点有右子树,那么右子树上所有结点的值都大小根结点的值;
二叉排序树的左右子树也要求都是二叉排序树。

简言之,二叉排序树的左子树、根节点、右子树中的数据依次递增!
1.左子树的数据比根结点数据小
2.右子树的数据比根结点数据大

实现过程

使用C++面向对象实现,使用二叉树的存储结构

结构体声明
struct BiNode{
	int data;
	BiNode *lchild;
	BiNode *rchild;
};
类的声明
class BiSortTree{
public:
	BiSortTree(int a[],int n);
	~BiSortTree(){Realese(root);}
	BiNode *Insert(int x){ return Insert(root, x);}
	BiNode *Search(int x){ return Search(root, x);}	

private:
	BiNode *root;
	BiNode *Insert(BiNode *bt,int x);
	BiNode *Search(BiNode *bt,int x);
	void Realese(BiNode * bt);		

};
插入函数

为保证二叉排序树的特征,在插入时,应先判断插入的位置:先与根比大小,之后递归调用插入函数将数据放入空位置!

BiNode *BiSortTree::Insert(BiNode *bt,int x){

	//插入元素插入到空位置 
	if(bt==NULL){			//找到空位置 
		BiNode *s=new BiNode;
		s->data=x;			//工作指针 
		bt=s;				 
		return bt;
	}
	
	//插入元素应先判断插入的位置:先与根比大小,之后递归调用插入函数 
	else if(x < bt->data) bt->lchild=Insert(bt->lchild,x);
	else if(x > bt->data) bt->rchild=Insert(bt->rchild,x);

}
构造函数

构造的就是不断插入结点的过程,构造函数要完成两件事:

  1. 根结点初始化;

  2. 不断调用插入函数,使得数据依次录入二叉排序树中。

BiSortTree::BiSortTree(int a[],int n){	//传入数据及其数目 
	//构造的就是不断插入结点的过程
	root=NULL;		//初始化根节点 
	int i;
	for(i=0;i 
查找函数 

查找过程类似二分查找,以根节点为基准,在合适区域查找指定元素

BiNode *BiSortTree::Search(BiNode *bt,int x){
	if(bt==NULL) return NULL;
	if(bt->data == x) return bt; 
	else if(x < bt->data) return Search(bt->lchild,x);
	else if(x > bt->data) return Search(bt->rchild,x); 
}
析构函数

二叉树本质上是二叉链表,属于动态存储,因此需手动析构。

void BiSortTree::Realese(BiNode * bt){
	if(bt==NULL) return ;
	else{
		Realese(bt->lchild);
		Realese(bt->rchild);
		delete bt;
	}
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5635469.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存