IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 【数据结构】浅谈二叉排序树 -> 正文阅读

[网络协议]【数据结构】浅谈二叉排序树

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

简介

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

简言之,二叉排序树的左子树、根节点、右子树中的数据依次递增!
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<n;i++){
		root=Insert(root,a[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;
	}
}
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-12-02 17:07:55  更:2021-12-02 17:09:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年7日历 -2024/7/6 6:37:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码