位置: IT常识 - 正文

Python中的二叉排序树和平衡二叉树是什么(python二叉树遍历算法)

编辑:rootadmin

推荐整理分享Python中的二叉排序树和平衡二叉树是什么(python二叉树遍历算法),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python二叉树遍历算法,python数据结构二叉树的查找算法,python中的二叉树,python数据结构二叉树的查找算法,python数据结构二叉树的查找算法,python二叉树遍历算法,python中的二叉树,python中的二叉树,内容如对您有帮助,希望把文章链接给更多的朋友!

二叉排序树

二叉排序树又称为二叉查找树。它或者是一颗空树,或者是具有下列性质的二叉树:

若它的左子树不为空,则左子树上所有节点的值均小于它的根结构的值;若它的右子树不为空,则右子树上所有节点的值均大于它的根结构的值;它的左、右子树也分别为二叉排序树。

构造一颗二叉排序树的目的,往往不是为了排序,而是为了提高查找和插入删除关键字的速度。

二叉排序树的操作:

查找:对比节点的值和关键字,相等则表明找到了;小了则往节点的左子树去找,大了则往右子树去找,这么递归下去,最后返回布尔值或找到的节点。插入:从根节点开始逐个与关键字进行对比,小了去左边,大了去右边,碰到子树为空的情况就将新的节点链接。删除:如果要删除的节点是叶子,直接删;如果只有左子树或只有右子树,则删除节点后,将子树链接到父节点即可;如果同时有左右子树,则可以将二叉排序树进行中序遍历,取将要被删除的节点的前驱或者后继节点替代这个被删除的节点的位置。

"""定义一个二叉树节点类。以讨论算法为主,忽略了一些诸如对数据类型进行判断的问题。"""def__init__(self,data,left=None,right=None):"""初始化:paramdata:节点储存的数据:paramleft:节点左子树:paramright:节点右子树"""self.data=dataself.left=leftself.right=rightclassBinarySortTree:"""基于BSTNode类的二叉排序树。维护一个根节点的指针。"""def__init__(self):self._root=Nonedefis_empty(self):returnself._rootisNonedefsearch(self,key):"""关键码检索:paramkey:关键码:return:查询节点或None"""bt=self._rootwhilebt:entry=bt.dataifkey<entry:bt=bt.leftelifkey>entry:bt=bt.rightelse:returnentryreturnNonedefinsert(self,key):"""插入操作:paramkey:关键码:return:布尔值"""bt=self._rootifnotbt:self._root=BSTNode(key)returnwhileTrue:entry=bt.dataifkey<entry:ifbt.leftisNone:bt.left=BSTNode(key)returnbt=bt.leftelifkey>entry:ifbt.rightisNone:bt.right=BSTNode(key)returnbt=bt.rightelse:bt.data=keyreturndefdelete(self,key):"""二叉排序树最复杂的方法:paramkey:关键码:return:布尔值"""p,q=None,self._root#维持p为q的父节点,用于后面的链接操作ifnotq:print("空树!")returnwhileqandq.data!=key:p=qifkey<q.data:q=q.leftelse:q=q.rightifnotq:#当树中没有关键码key时,结束退出。return#上面已将找到了要删除的节点,用q引用。而p则是q的父节点或者None(q为根节点时)。ifnotq.left:ifpisNone:self._root=q.rightelifqisp.left:p.left=q.rightelse:p.right=q.rightreturn#查找节点q的左子树的最右节点,将q的右子树链接为该节点的右子树#该方法可能会增大树的深度,效率并不算高。可以设计其它的方法。r=q.leftwhiler.right:r=r.rightr.right=q.rightifpisNone:self._root=q.leftelifp.leftisq:p.left=q.leftelse:p.right=q.leftdef__iter__(self):"""实现二叉树的中序遍历算法,展示我们创建的二叉排序树.直接使用python内置的列表作为一个栈。:return:data"""stack=[]node=self._rootwhilenodeorstack:whilenode:stack.append(node)node=node.leftnode=stack.pop()yieldnode.datanode=node.rightif__name__=='__main__':lis=[62,58,88,48,73,99,35,51,93,29,37,49,56,36,50]bs_tree=BinarySortTree()foriinrange(len(lis)):bs_tree.insert(lis[i])#bs_tree.insert(100)bs_tree.delete(58)foriinbs_tree:print(i,end="")#print("\n",bs_tree.search(4))

相关推荐:《Python视频教程》

二叉排序树总结:

二叉排序树以链式进行存储,保持了链接结构在插入和删除操作上的优点。在极端情况下,查询次数为1,但操作次数不会超过树的深度。也就是说,二叉排序树的查找性能取决于二叉排序树的形状,也就引申出了后面的平衡二叉树。给定一个元素集合,可以构造不同的二叉排序树,当它同时是一个完全二叉树的时候,查找的时间复杂度为O(log(n)),近似于二分查找。当出现最极端的斜树时,其时间复杂度为O(n),等同于顺序查找,效果最差。

Python中的二叉排序树和平衡二叉树是什么(python二叉树遍历算法)

平衡二叉树

平衡二叉树(AVL树,发明者的姓名缩写):一种高度平衡的排序二叉树,其每一个节点的左子树和右子树的高度差最多等于1。

平衡二叉树首先必须是一棵二叉排序树!

平衡因子(Balance Factor):将二叉树上节点的左子树深度减去右子树深度的值。

对于平衡二叉树所有包括分支节点和叶节点的平衡因子只可能是-1,0和1,只要有一个节点的因子不在这三个值之内,该二叉树就是不平衡的。

最小不平衡子树:距离插入结点最近的,且平衡因子的绝对值大于1的节点为根的子树。

平衡二叉树的构建思想:每当插入一个新结点时,先检查是否破坏了树的平衡性,若有,找出最小不平衡子树。在保持二叉排序树特性的前提下,调整最小不平衡子树中各结点之间的连接关系,进行相应的旋转,成为新的平衡子树。

下面是由[1,2,3,4,5,6,7,10,9]构建平衡二叉树

本文链接地址:https://www.jiuchutong.com/zhishi/304733.html 转载请保留说明!

上一篇:Python如何实现打字训练的程序(python dayup)

下一篇:python socket发送消息的方法(python socket发送文件)

  • 华为手机怎么把旧手机导入新手机(华为手机怎么把繁体字调成简体字)

    华为手机怎么把旧手机导入新手机(华为手机怎么把繁体字调成简体字)

  • 如何屏蔽垃圾短信(如何屏蔽垃圾短信苹果11)

    如何屏蔽垃圾短信(如何屏蔽垃圾短信苹果11)

  •  微信删除好友后对方还有聊天记录吗(微信删除好友后对方还有自己吗)

    微信删除好友后对方还有聊天记录吗(微信删除好友后对方还有自己吗)

  • 华为手机高清通话怎么关闭(华为手机高清通话没有了)

    华为手机高清通话怎么关闭(华为手机高清通话没有了)

  • 怎样隐身访问陌生人的qq空间(怎样隐身访问陌生人的qq空间,还会显示加一吗)

    怎样隐身访问陌生人的qq空间(怎样隐身访问陌生人的qq空间,还会显示加一吗)

  • 怎么查文档里面有多少个字(怎么查文档里面的错别字)

    怎么查文档里面有多少个字(怎么查文档里面的错别字)

  • 腾讯视频vip怎么共享给别人(腾讯视频vip怎么退款)

    腾讯视频vip怎么共享给别人(腾讯视频vip怎么退款)

  • 公众号文字修改多久生效(公众号文字修改可以增字吗)

    公众号文字修改多久生效(公众号文字修改可以增字吗)

  • WPS中word无法复制粘贴怎么回事(wps文档无法复制)

    WPS中word无法复制粘贴怎么回事(wps文档无法复制)

  • 华为mate30pro刷新率是多少Hz(华为mate30pro5g屏幕刷新)

    华为mate30pro刷新率是多少Hz(华为mate30pro5g屏幕刷新)

  • 电子邮件格式怎么填写(电子邮件格式怎么写才正确)

    电子邮件格式怎么填写(电子邮件格式怎么写才正确)

  • p30支持wifi6吗(华为p30支持无线吗)

    p30支持wifi6吗(华为p30支持无线吗)

  • 华为nova7se是什么意思(华为nova7se是什么意思se)

    华为nova7se是什么意思(华为nova7se是什么意思se)

  • lraaloo是什么型号(lora是什么牌子)

    lraaloo是什么型号(lora是什么牌子)

  • 苹果云备份有必要开吗(苹果云备份有必要开启吗)

    苹果云备份有必要开吗(苹果云备份有必要开启吗)

  • 60v20a要充多久(60v20安充电要多久)

    60v20a要充多久(60v20安充电要多久)

  • 手环手表怎么充电(手环手表怎么充电充不进去)

    手环手表怎么充电(手环手表怎么充电充不进去)

  • 苹果7要不要升级13.3

    苹果7要不要升级13.3

  • qq背景图怎么取消(qq背景图怎么取消电脑)

    qq背景图怎么取消(qq背景图怎么取消电脑)

  • iphonex手机屏幕尺寸(iphonex手机屏幕失灵怎么强制关机)

    iphonex手机屏幕尺寸(iphonex手机屏幕失灵怎么强制关机)

  • 手机护眼模式怎么关闭(手机护眼模式怎么调)

    手机护眼模式怎么关闭(手机护眼模式怎么调)

  • hp复印机怎么缩小复印(hp打印机复印怎么缩印)

    hp复印机怎么缩小复印(hp打印机复印怎么缩印)

  • 怎么将pr视频导出(怎么将pr视频导出到桌面)

    怎么将pr视频导出(怎么将pr视频导出到桌面)

  • 拼多多怎么使用免单卡(拼多多怎么使用微信零钱支付)

    拼多多怎么使用免单卡(拼多多怎么使用微信零钱支付)

  • 移动wifi密码忘了怎么办(移动WiFi密码忘了怎么改)

    移动wifi密码忘了怎么办(移动WiFi密码忘了怎么改)

  • 小米9上面的孔是什么(小米9孔位图解)

    小米9上面的孔是什么(小米9孔位图解)

  • 手机qq如何开启自动回复(手机QQ如何开启登录保护)

    手机qq如何开启自动回复(手机QQ如何开启登录保护)

  • win10网络通但不能上网(win10网络正常但不能上网)

    win10网络通但不能上网(win10网络正常但不能上网)

  • 富士山与丛生福禄考花田,日本山梨县 (© Srinil/shutterstock)(富山和富士山)

    富士山与丛生福禄考花田,日本山梨县 (© Srinil/shutterstock)(富山和富士山)

  • [Web安全入门]BURP基本使用详解(web安全如何入门)

    [Web安全入门]BURP基本使用详解(web安全如何入门)

  • ECharts的讲解(echarts简介)

    ECharts的讲解(echarts简介)

  • 【Vue 快速入门系列】Vue数据实现本地存储、自定义事件绑定、全局事件总线、$nextTick的使用(vue快速入门与实战开发)

    【Vue 快速入门系列】Vue数据实现本地存储、自定义事件绑定、全局事件总线、$nextTick的使用(vue快速入门与实战开发)

  • YOLO v8详解(yolo v4 v5)

    YOLO v8详解(yolo v4 v5)

  • 车辆购置税的税率是多少
  • 个税申报表中的基本养老保险怎么填
  • 扣缴附加税怎么做分录
  • 材料采购二级科目
  • 企业的现金流量表反映的是什么
  • 企业缴纳增值税会计目录
  • 非同一控制下用什么法
  • 帮别人开票收税点怎么做账
  • 工程预收账款的会计分录
  • 短期借款的会计凭证
  • 补开的银行手续费发票怎么做账
  • 企业用商业汇票支付购货款
  • 企业利润分配如何分析
  • 什么是简易征收办法征收增值税
  • 国家要收回房屋土地怎么补偿
  • 财务保证金怎么做分录
  • 红冲发票后 库存怎么处理
  • 民营医院实收资本科目
  • 工资扣税标准计算方法
  • 怎么用U盘装系统win7
  • win11笔记本如何让电池充电到100%
  • php 语法
  • 清除cmos数据按钮一直亮
  • web课程设计网页
  • 计提存货减值准备符合可靠性原则
  • 企业购入旧设备怎么入账
  • 浅谈特殊儿童的融合教育论文
  • 会计分录由什么要素组成
  • 外商投资的企业再投资
  • 新英格兰的秋天
  • joomla安装教程
  • php获取文本框输入的值
  • 前端调用后端代码
  • js异步解决方案
  • 会计凭证作用的说法中不正确的是
  • 数据挖掘 实战
  • 通过微信支付码能查到微信本人吗
  • 税局代开专票已扣款还需季度增值税申报吗
  • 公司购买黄金送客户可以取得进项抵税吗
  • 已经验旧的发票怎么作废
  • php匹配邮箱
  • 有外币业务的银行
  • 小型商贸企业
  • SqlServer 2005 T-SQL Query 学习笔记(3)
  • 增值税一般纳税人是什么意思
  • 一般纳税人企业所得税5%还是25%
  • 纳税申报人的对象是哪些
  • 加盟费明细
  • 房租没有发票如何处理
  • 小规模纳税人缴纳增值税怎么做账
  • 稳岗补贴操作流程
  • 车辆购置税如何账务处理
  • 航天信息服务费发票哪里打印
  • 房地产公司工程部岗位职责
  • 免抵退税怎么申报
  • 记账凭证的基本要素包括
  • 保理融资的费用由谁承担
  • 工会经费缴纳会计分录
  • 收到存款利息收入用什么凭证
  • MySQL中的max()函数使用教程
  • ubuntu安装超详细教程
  • linux计划任务怎么写
  • win10mobile升级顾问
  • xp电脑状态栏跑到左边了怎么设置回来
  • Skype.exe - Skype是什么进程 有什么用
  • pascl32.exe - pascl32是什么进程 有什么用
  • msn无法登录
  • win10mobile最新版本
  • Jquery+Ajax+PHP+MySQL实现分类列表管理(下)
  • 网页制作范例
  • js正则表达式gi
  • javascript编程基础
  • javascript面向对象精要pdf下载
  • jquerymobile实例网站
  • 税务局风险管理股工作总结
  • 德勤 税务
  • 企业跨区域迁移
  • 个人租车收入如何缴纳个人所得税
  • 工商登记是实质性的吗
  • ecco made in china
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设