位置: 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发送文件)

  • 华为freebudspro2怎么查找(华为freebudspro2怎么开降噪)

    华为freebudspro2怎么查找(华为freebudspro2怎么开降噪)

  • 小米手机安装器设置在哪里(小米手机安装器管理在哪里)

    小米手机安装器设置在哪里(小米手机安装器管理在哪里)

  • 火山申请5分钟的长视频的方法(火山官方认证申请公函下载)

    火山申请5分钟的长视频的方法(火山官方认证申请公函下载)

  • 电脑版文本框的环绕方式怎么设置(电脑文本框在哪个位置)

    电脑版文本框的环绕方式怎么设置(电脑文本框在哪个位置)

  • 红米k20pro要不要贴膜

    红米k20pro要不要贴膜

  • 抖音一天可以关注能个人(抖音一天可以关注多少个粉丝)

    抖音一天可以关注能个人(抖音一天可以关注多少个粉丝)

  • 手机切换软件每次都要重新启动(手机切换软件每秒多少帧)

    手机切换软件每次都要重新启动(手机切换软件每秒多少帧)

  • 华为荣耀30s怎么设置返回键(华为荣耀30s如何)

    华为荣耀30s怎么设置返回键(华为荣耀30s如何)

  • 华为智慧语音怎么卸载(华为智慧语音怎么用)

    华为智慧语音怎么卸载(华为智慧语音怎么用)

  • 为什么苹果手机开了数据还是用不了(为什么苹果手机屏幕亮度突然变暗)

    为什么苹果手机开了数据还是用不了(为什么苹果手机屏幕亮度突然变暗)

  • oppor17充电口松了怎么办(oppor17充电口松动换多少钱)

    oppor17充电口松了怎么办(oppor17充电口松动换多少钱)

  • 小米10是多少倍变焦(小米10是多少倍变焦镜头)

    小米10是多少倍变焦(小米10是多少倍变焦镜头)

  • 数据模型是什么的集合(数据库数据模型是什么)

    数据模型是什么的集合(数据库数据模型是什么)

  • 手机保存图片显示成功了为什么相册里没有(手机保存图片显示无权限怎么办)

    手机保存图片显示成功了为什么相册里没有(手机保存图片显示无权限怎么办)

  • 怎么把两个文件压缩在一起(怎么把两个文件压缩成一个压缩包手机)

    怎么把两个文件压缩在一起(怎么把两个文件压缩成一个压缩包手机)

  • 钉钉指数有什么用(钉钉指数700)

    钉钉指数有什么用(钉钉指数700)

  • x面容id进水能修吗(面容id进水维修)

    x面容id进水能修吗(面容id进水维修)

  • porhub可以设置中文界面吗(poruhbu如何设置中文)

    porhub可以设置中文界面吗(poruhbu如何设置中文)

  • 拼多多的现金钱包在哪(拼多多的现金钱在哪里看)

    拼多多的现金钱包在哪(拼多多的现金钱在哪里看)

  • hwt文件怎么打开(hwt文件放哪里)

    hwt文件怎么打开(hwt文件放哪里)

  • 手机忘记wifi密码怎么查看(手机忘记wifi密码怎么办)

    手机忘记wifi密码怎么查看(手机忘记wifi密码怎么办)

  • 电信怎么办理流量套餐(电信怎么办理流量卡)

    电信怎么办理流量套餐(电信怎么办理流量卡)

  • 爱奇艺会员可以几个人用(爱奇艺会员可以几个人一起登录)

    爱奇艺会员可以几个人用(爱奇艺会员可以几个人一起登录)

  • 结构化程序设计的主要内容(结构化程序设计方法简称)

    结构化程序设计的主要内容(结构化程序设计方法简称)

  • surface3和surface pro3区别(surface3和surface pro1)

    surface3和surface pro3区别(surface3和surface pro1)

  • 谈谈CentOS发布内核安全补丁:修复Meltdown和Spectre漏洞(centos停止发布)

    谈谈CentOS发布内核安全补丁:修复Meltdown和Spectre漏洞(centos停止发布)

  • 增值税小规模纳税人
  • 地税票子怎么补办
  • 金税四期正式启动
  • 实缴资本需要存放多久
  • 购买私募基金有风险吗
  • 会计准则体系包括会计制度吗
  • 小型微利企业预缴
  • 租入住房用于职工福利,进项转出吗?
  • 房租费没有发票怎么做账务处理
  • 融资租入固定资产属于资产吗
  • 实收资本需要计提印花税吗
  • 科目余额表期初借贷一定要相等吗
  • 年底增值税专用发票入帐不勾选抵扣帐务处理
  • 问答技巧例子
  • 公司与银行签订的远期合约汇率是什么
  • 货运发票与运输发票的区别
  • 个体户开普票要交企业所得税吗
  • 股权转让企业所得税如何申报
  • 暂估应付款借方
  • 个体户生产经营所得怎么报税
  • 软件行业的收入怎么样
  • 小规模纳税人增值税免征额
  • 防暑降温用品进什么科目
  • 小规模纳税人的专票可以抵税吗
  • 企业筹建期间购置机器设备支出计入什么科目
  • php curl header参数
  • nalntsrv.exe - nalntsrv是什么进程 有什么用
  • 轻薄本拆卸
  • php获取useragent
  • 购买房屋用于出租算投资房吗
  • Element-Plus el-col、el-row快速布局
  • golang、python、php、c++、c、java、Nodejs性能对比
  • 适用执行企业会计准则的一般企业
  • vue created mounted
  • 销售提成属于什么费用
  • 财税2016年12号文件解读
  • js处理表格数据
  • 利用Linux Find命令查找文件方法记录 快速查找文件位置
  • 缴纳残保金会计分录最新
  • 建筑企业总包单位有哪些
  • 农药普通发票可以抵扣
  • element表格表单
  • 唐山发生5.1级地震
  • 红冲后的发票税怎么办
  • 详解sql基础语法实验报告
  • 银行存钱转账
  • 利润表的组成是指
  • 改签机票要收费
  • 劳务费发票可以抵扣吗?
  • 外贸出口增值税附表二填哪项
  • 企业支付的费用化的一般借款利息支出属于什么
  • 拿工资要开发票,发票去哪儿开?
  • 当月只有进项税额会计怎么做账
  • 固定资产小汽车折旧怎么计提
  • 支付保证金如何做账务处理
  • 销售返利如何做账
  • 销售额营业收入是指一年还是一个月
  • 建筑劳务没有合同能起诉吗
  • 其他应付款的借贷方分别表示什么
  • mysql查看使用情况
  • xp系统怎么打开设置
  • window7 aero
  • win10桌面添加画图图标
  • centos7文件路径
  • win7系统开机进不去
  • win7系统声音设置方法
  • linux安装步骤
  • python计算ndvi
  • opengl多窗口绘图
  • 两个js文件互相取变量
  • 复制链接
  • javascript包含哪三大部分
  • python repr
  • javascript初级教程
  • python语言基本语法
  • js常用方法总结
  • javascript 对象的this指向
  • 公司注销报税怎么申报
  • 青岛市税务局归谁管
  • 契税的征收机关是哪里
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设