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

数据结构 -- 树形查找(一)二叉排序树

二叉排序树

二叉排序树的定义

二叉排序树,又称二叉查找树

一棵二叉树或者是空二叉树,或者是具有以下性质的二叉树:

左子树上所有结点的关键字均小于根结点的关键字

右子树上所有结点的关键字均大于根结点的关键字

左子树和右子树又各是一棵二叉排序树

(二叉排序树中序遍历,可以得到一个递增的有序序列)

二叉排序树的查找

在这里插入图片描述

typedef struct BiTNode{ElemType data;						//数据域struct BiTNode * lchild,*rchild;	//左右孩子
}BiTNode,*BiTree;//查找实现
BSTNode *BST_Sreach(BSTree T,int key){while(T!=NULL&&key!=T->key){if(key<T->key) T=T->lchild;else T = T->rchild;}return T;
}//最坏时间复杂度O(1)//递归实现
BSTNode *BST_Sreach(BSTree T,int key){if(T==NULL) return NULL;if(key == T->key) return T;else if(key < T->key) return BST_Sreach(T->lchild,key);else return BST_Sreach(T->rchild,key);
}//最坏时间复杂度O(n)
二叉排序树的插入
//在二叉排序树插入关键字为k的新结点(递归实现)
int BST_Insert(BSTree &T,int k){if(T==NULL){T=(BSTree)malloc(sizeof(BSTNode));T->key = k;T->lchild = T->rchild = NULL;return 1;}else if(k == T->key)	return 0;		//树中存在相同关键字的结点,插入失败else if(k<T->key)	return BST_Insert(T->lchild,k);else return BST_Insert(T->rchild,key);
}
二叉排序树的构造
//按照str[]中的关键字序列建立二叉排序树
void Create_BST(BSTree &T,int str[],int n){T = NULL;int i = 0;while(i<n){BST_Insert(T,str[i]);++i;}
}
二叉排序树的删除

先搜索找到目标结点:

①若删除的结点z是叶结点,则直接删除

②若要删除的结点z只有一棵左子树或右子树,则让z的子树称为z的父节点的子树,代替z的位置

③若要删除的结点有左右两棵子树,则令z的直接后继(或直接前驱)代替z,然后从二叉排序树中删去这一个直接后继(或直接前驱),这样就转化成了第一或第二种情况

查找效率分析

查找长度 – 在查找运算中,需要对比关键字的次数称为查找长度,反映了查找操作的时间复杂度

http://www.xdnf.cn/news/458821.html

相关文章:

  • 前端上传获取excel文件后,如何读取excel文件的内容
  • 实用工具:微软软件PowerToys(完全免费),实现多台电脑共享鼠标和键盘(支持window系统)
  • 基于微信小程序的在线聊天功能实现:WebSocket通信实战
  • 代码随想录算法训练营第60期第三十七天打卡
  • Yeoman实战指南:从零打造自定义项目生成器
  • pyenv简单的Python版本管理器(macOS版)
  • P8803 [蓝桥杯 2022 国 B] 费用报销
  • V837s-LAN8720A网口phy芯片调试
  • git管理忽略指定路径/临时文件
  • GitHub 趋势日报 (2025年05月14日)
  • 时序数据库IoTDB分布式架构解析与运维指南
  • Kafka消息路由分区机制深度解析:架构设计与实现原理
  • Remote Desktop安卓远程无法使用中文输入法
  • Nginx 返回 504 状态码表示 网关超时(Gateway Timeout)原因排查
  • HttpServletRequest常用功能简介-笔记
  • Go 中闭包的常见使用场景
  • 【Spring Cloud Gateway】Nacos整合遇坑记:503 Service Unavailable
  • 【人工智能-agent】--Dify+Mysql+Echarts搭建了一个能“听懂”人话的数据可视化助手!
  • 全国青少年信息素养大赛 Python编程挑战赛初赛 内部集训模拟试卷八及详细答案解析
  • 数据科学和机器学习的“看家兵器”——pandas模块 之四
  • 红黑树:数据世界的平衡守护者
  • Android开发-在应用之间共享数据
  • HTML 表格与div深度解析区别及常见误区
  • 【Linux】socket网络编程基础
  • 解决ubuntu20中tracker占用过多cpu,引起的风扇狂转
  • 从算力困境到创新突破:GPUGEEK如何重塑我的AI开发之旅
  • 【HCIA】策略路由
  • C#+WPF+prism+materialdesign创建工具主界面框架
  • 安装win11硬盘分区MBR还是GPT_装win11系统分区及安装教程
  • MongoDB数据库深度解析:架构、特性与应用场景