当前位置: 首页 > news >正文

数据结构-二叉排序树(建立、查找、修改)

二叉排序树概念

二叉排序树是动态查找表的一种,也是常用的表示方法。

其中,它具有如下性质:

1.若它的左子树非空,则其左子树的所有节点的关键值都小于根节点的关键值。

2.若它的右子树非空,则其右子树的所有节点的关键值都大于根结点的关键值。

3.它的左右子树也分别都是二叉排序树。

PS:对二叉排序树进行中序遍历,得到的序列,总会是一个升序的数列。

二叉排序树的建立

我们使用C语言来建立。

其中我们对二叉排序树的结构体定义如下:

typedef int ElemType;
typedef struct BTNode{ElemType key;struct BTNode *lchild,*rchild;
}BTNode,*BSTree;

建立二叉排序树的代码如下:

BSTree InsertBST(BSTree bst,BSTree s)		//遍历二叉排序树,找到合适的位置 
{if(bst==NULL)bst = s;else{if(s->key < bst->key)bst->lchild = InsertBST(bst->lchild,s);if(s->key > bst->key){bst->rchild = InsertBST(bst->rchild,s);}}return bst;
}BSTree CreateBST()		//建立二叉排序树 
{BSTree bst,s;int key;bst = NULL;printf("请输入关键字值,输入-1结束.\n");while(1){scanf("%d",&key);if(key!=-1){s = (BSTree)malloc(sizeof(BTNode));s->key = key;s->lchild = NULL;s->rchild = NULL;bst = InsertBST(bst,s);printf("成功.\n");}elsebreak;}return bst;
}

二叉排序树的插入

BSTree InsertBST(BSTree bst,BSTree s)		//遍历二叉排序树,找到合适的位置 
{if(bst==NULL)bst = s;else{if(s->key < bst->key)bst->lchild = InsertBST(bst->lchild,s);if(s->key > bst->key){bst->rchild = InsertBST(bst->rchild,s);}}return bst;
}BSTree SearchBST(BSTree bst,int key)		//查找关键值key的节点,并且返回这个节点 
{if(bst == NULL)return NULL;else if(key == bst->key)return bst;else if(key > bst->key)return SearchBST(bst->rchild,key);elsereturn SearchBST(bst->lchild,key);
}BSTree InsertBST_key(BSTree bst,int key)		//搜寻一个关键值,如果没有就插入 
{BSTree s;s = SearchBST(bst,key);if(s)printf("该节点已经存在.");else{s = (BSTree)malloc(sizeof(BTNode));s->key = key;s->lchild = NULL;s->rchild = NULL;s = InsertBST(bst,s);}return s;
}

查找二叉排序树指定节点的双亲

BSTree SearchBST_F(BSTree bst,int key,BSTree *F)		//F存储key关键值节点的双亲节点,函数返回key关键值节点. 
{if(bst == NULL)return NULL;if(key == bst->key)return bst;else{*F = bst;if(key < bst->key)return SearchBST_F(bst->lchild,key,F);elsereturn SearchBST_F(bst->rchild,key,F);}
}

http://www.lryc.cn/news/229178.html

相关文章:

  • Linux 性能优化之使用 Tuned 配置优化方案
  • Day02_《MySQL索引与性能优化》
  • (只需三步)Vmvare tools安装教程,实现与windows互通复制粘贴与文件拖拽
  • Android自定义控件:一款多特效的智能loadingView
  • C语言之初阶指针
  • MongoDB基础知识~
  • 41. 缺失的第一个正数
  • 数据结构—数组栈的实现
  • AI大模型低成本快速定制秘诀:RAG和向量数据库
  • Please No More Sigma(构造矩阵)
  • HTML设置标签栏的图标
  • 4.CentOS7安装MySQL5.7
  • 【华为OD题库-014】告警抑制-Java
  • 高频SQL50题(基础题)-5
  • Spring IoC DI 使⽤
  • Zigbee智能家居方案设计
  • 机器视觉目标检测 - opencv 深度学习 计算机竞赛
  • 无监督学习的集成方法:相似性矩阵的聚类
  • 16. 机器学习——决策树
  • DevOps系列---【jenkinsfile使用sshpass发送到另一台服务器】
  • Docker 和 Kubernetes:技术相同和不同之处
  • 通信世界扫盲基础二(原理部分)
  • 手机厂商参与“百模大战”,vivo发布蓝心大模型
  • 【微软技术栈】C#.NET 中的泛型
  • 【毕业论文】基于微信小程序的植物分类实践教学系统的设计与实现
  • [量化投资-学习笔记011]Python+TDengine从零开始搭建量化分析平台-MACD金死叉策略回测
  • tensorboard报错解决:No dashboards are active for the current data set
  • 线性代数本质系列(一)向量,线性组合,线性相关,矩阵
  • python语法之注释
  • React【异步逻辑createAsyncThunk(一)、createAsyncThunk(二)、性能优化、createSelector】(十二)