二叉排序树的实现
时间:2020-04-19
本文章向大家介绍二叉排序树的实现,主要包括二叉排序树的实现使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1. 编写SearchBST(T, key)与InsertBST(T, key)的伪代码,并实现;
SearchBST(T,key)
伪代码:
if (T为空 || T的值等于key)返回T
if (T的值 > key)Search(T->lchid, key)
if (T的值 < key)Search(T->rchid, key)
代码:
void Search(BiTree T, char key) {
if (T == NULL || T->data == key)return;
if (T->data > key)Search(T->lchild, key);
if (T->data < key)Search(T->rchild, key);
}
InsertBST(T, key)
伪代码:
if (T为空) {
建立新节点
新节点的值为key
}
if (T == key)返回T
if (T->data > key)InsertBST(T->lchild,key)
if (T->data < key)InsertBST(T->rchild,key)
代码:
int InsertBST(BiTree& T, char key) {
if (T == NULL) {
T = new BiTNode;
T->data = key;
T->lchild == NULL;
T->rchild == NULL;
return 1;
}
if (T->data == key)return 0;
if (T->data > key)return InsertBST(T->lchild, key);
if (T->data < key)return InsertBST(T->rchild, key);
}
2. 编写CreateBST(T)的伪代码实现从控制台输入创建BST树。最后使用代码实现。使用“50 30 80 20 40 90 10 25 35 85 23 88”创建BST,并中序输出该BST
CreateBST(T)
伪代码:
初始化树T
while (i < n) {
使用插入节点的函数InsertBST进行创建
i++
}
返回T
代码:
BiTNode *CreatBST(int a[], int n) {
BiTNode *T = NULL;
int i = 0;
while (i < n) {
InsertBST(T, a[i]);
i++;
}
return T;
}
创建树并中序输出
3. 编写DeleteBST(T, key)的伪代码实现从T中删除关键字key。
DeleteBST(bt,k)
伪代码:
if(bt为空)返回0
else {
if(k<bt->data)返回递归DeleteBST(bt->lchild,k)
else if(k>bt->data)返回递归DeleteBST(bt->rchild,k)
else {
引用函数Delete(bt)来删除关键字为k的节点
返回1
}
}
代码:
int DeleteBST(BiTNode*& bt, char k) {
if (bt == NULL)return 0;
else {
if (k < bt->data)return DeleteBST(bt->lchild, k);
else if (k > bt->data)return DeleteBST(bt->rchild, k);
else {
Delete(bt);
return 1;
}
}
}
Delete(p)
伪代码:
创建一个节点q
if (p的右孩子为空) {
q = p;
p=p的左孩子//让被删除节点的左孩子放到被删除节点上
删除节点q
}
else if (p的左孩子为空) {
q = p;
p = p的右孩子//让被删除节点的右孩子放到被删除节点上
删除节点q
}
当p节点的左右孩子都存在时引用Delete1函数
代码:
void Delete(BiTNode*& p) {
BiTNode* q;
if (p->rchild == NULL) {
q = p;
p = p->lchild;
free(q);
}
else if (p->lchild == NULL) {
q = p;
p = p->rchild;
free(q);
}
else Delete1(p, p->lchild);
}
Delete1(p,r)
伪代码:
创建节点q
if(删除节点的左子树的右子树不为空)递归Delete1找到被删除节点的左子树 的最右下节点
else {
将最右下节点的值赋给被删除节点
再将最右下节点放在被删节点上
删除节点q
}
代码:
void Delete1(BiTNode* p, BiTNode*& r) {
BiTNode* q;
if (r->rchild != NULL) {
Delete1(p, r->rchild);
}
else {
p->data = r->data;
q = r;
r = r->lchild;
free(q);
}
}
原文地址:https://www.cnblogs.com/hhs1/p/12731211.html
- CSS 代码的书写规范、顺序
- MSBuild入门(续)
- 续:WordPress 文章图片部署真正的懒加载(Lazy Load)
- Windows 下的安装phpMoAdmin
- 实用代码-JavaScript实用小函数一枚(深入对象取值)
- SQL Server 2008 压缩
- 如何在程序中加入Growl通知
- WordPress 设置与调用 Cookie 的相关代码
- MSBuild入门
- HTTP Basic Authentication验证WCF Data Service
- 移除WordPress 仪表盘首页的“插件”“其它WordPress 新闻”小工具
- 解决VMware 7在Windows 7上无法上网的问题
- Windows Server 2008群集仲裁机制
- [C#2] 5-迭代器
- 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 数组属性和方法
- 命名那个数字
- 挤牛奶Milking Cows
- 用了这么久axios,你知道它是如何封装 HTTP 请求的吗?
- 方块转换 Transformations
- 回文平方数 Palindromic Squares
- 双重回文数 Dual Palindromes
- 修理牛棚 Barn Repair
- 牛式 Prime Cryptarithm
- 解题报告(牛客OI周赛7-普及组)
- 号码锁 Combination Lock
- 数据结构回顾及展望(一)
- Spring Boot 整合 Quartz 实现 Java 定时任务的动态配置
- 数据结构回顾及展望(二)(3.22更新)
- Windows挂载CFS文件系统
- XMU oj Problem List