二叉排序树
时间:2019-06-12
本文章向大家介绍二叉排序树,主要包括二叉排序树使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、定义
二叉排序树又称作二叉查找树,它是一种对排序和查找都很有用的特殊二叉树。二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:
(1)若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3)它的左、右子树也分别为二叉排序树.
由以上定义可得出:中序遍历一棵二叉树时可以得到一个结点值递增的有序序列
二、二叉排序树的创建、查找、插入
//-----------二叉排序树的二叉链表存储形式-------------------
typedef int KeyType,InfoType;
//数据元素定义
typedef struct
{
KeyType key; //关键字域
InfoType otherinfo; //其他域
} ElemType;
//结点
typedef struct BSTNode
{
ElemType data;
struct BSTNode *lchild,*rchild;//左右子树
} BSTNode,*BSTree;
//插入二叉排序树
void InsertBST(BSTree &T,ElemType e)
{
if(!T)
{
BSTree S = new BSTNode;
S->data = e;
S->lchild=S->rchild=NULL;
T=S;
}
else if(T->data.key>e.key)
{
InsertBST(T->lchild,e);
}
else if(T->data.key<e.key)
{
InsertBST(T->rchild,e);
}
}
#define ENDFLAG 0
//创建二叉排序树
void CreateBSTree(BSTree &T)
{
ElemType e;
T=NULL;
cout << "输入key和value,0结束" << endl;
cin >> e.key >> e.otherinfo;
int i = 0;
while(e.key!=ENDFLAG)
{
i++;
InsertBST(T,e);
cin >> e.key >> e.otherinfo;
}
cout << "创建成功,共有" << i << "个元素" << endl;
}
//查找二叉排序树
ElemType SearchBST(BSTree T,KeyType key)
{
if(T)
{
if(T->data.key==key)
{
return T->data;
}
else if(T->data.key>key)
{
return SearchBST(T->lchild,key);
}
else if(T->data.key<key)
{
return SearchBST(T->rchild,key);
}
}
else
{
ElemType e;
e.key=-1;
return e;
}
}
原文地址:https://www.cnblogs.com/HenuAJY/p/11007393.html
- 从0学习MySQL系列(二)安装篇
- 从0学习MySQL系列(三)概念篇
- SQL Server基础SQL脚本之主外键约束
- SQL Server基础SQL脚本之Group By
- SQL Server基础SQL脚本之内外连接、交叉连接;函数、子查询
- MySQL 面试选择题15道(单选)
- SQL Server基础SQL脚本之分区表、分区方案
- SQL Server基础SQL脚本之创建架构、排序
- 枚举算法(Enumeration algorithm)实例一
- 剑指offer代码解析——面试题16反转单链表
- QMainWindow 和 QWidget 设置layout
- 安全工具Aircrack-ng的使用
- Windows Server 2008 R2 搭建微信小程序
- insert事务产生duplicate key error引发的死锁分析
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python3.7调试的实例方法
- Laravel框架控制器,视图及模型操作图文详解
- PHP实现带进度条的Ajax文件上传功能示例
- 基于selenium及python实现下拉选项定位select
- PHP rmdir()函数的用法总结
- thinkphp5修改view到根目录实例方法
- openCV提取图像中的矩形区域
- PHP二维索引数组的遍历实例分析【2种方式】
- Selenium及python实现滚动操作多种方法
- PHP使用JPGRAPH制作圆柱图的方法详解
- PHP 实现超简单的SESSION与COOKIE登录验证功能示例
- PHP 图像处理与SESSION制作超简单验证码的方法示例
- 简述PHP7.4 新特性和废弃的功能
- laravel5.1框架下的批量赋值实现方法分析
- Laravel框架环境与配置操作实例分析