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

  • 信息化投入包括手机吗
  • 房产公司企业所得税如何预征
  • 增值税进项税额加计抵减会计处理
  • 支付职工医疗保险怎么查
  • 管理费用当月可以有余额吗
  • 出口企业免抵税额要作进项转出吗
  • 交易性金融资产借贷方向
  • 工业企业辅助生产费用的分配方法
  • 外币账户怎么操作
  • 旧公司库存如何管理
  • 外单位的人能否作为本单位的费用报销人?
  • 增值税税负多少算高
  • 印花税按次申报是什么意思
  • 餐饮业是否可以开专用发票
  • 税务行业软件
  • 假设公司为增值税一般纳税人
  • 股权转让未分配利润如何账务处理
  • 个税申报工资比实际工资高,汇算清缴时能退吗
  • 企业空气检测费应该计入什么会计科目核算?
  • 没有税率的发票怎么开
  • 进项税额及存货减值
  • window10玩吃鸡总崩溃
  • 带息应收票据的核算
  • 贷款核销对个人的影响
  • 印花税贴花怎么贴划线
  • thinkphp表单验证
  • 境外支付佣金代扣代缴增值税
  • 应收账款确认无法收回
  • php实现截取中文字符
  • 购车的进项税怎么抵扣
  • 未开票收入如何申报
  • 内外参标定
  • 车辆购置税发票图片
  • 服务业的增值税
  • php获取浏览器ua
  • SwinIR实战:详细记录SwinIR的训练过程
  • "设计"
  • 股本减少是什么意思
  • yolov5的使用
  • 开发票的销售收入,正规的做账怎么做
  • 事业单位无形资产包括哪些
  • 运输发票必须附票吗
  • opengl开发图形界面
  • phpcms api
  • 小规模申请一般纳税人怎么申请
  • 子公司减资是利好还是利空
  • 现金周期和经营周期的计算公式
  • 对公账户转到个人账户怎么做账
  • 如何计算生产费用
  • 汇算清缴补缴税款会计分录
  • 已经确认收入的商品发生销售折让
  • 房地产企业进项税抵扣的时间
  • 进项增值税发票抵扣期限
  • 没有收入还需要纳税吗
  • 超期未备案可以投诉么
  • 商业企业的营业成本包括
  • 融资租入固定资产属于本企业资产
  • 总分类账与明细分类账的关系
  • 会计档案销毁方案怎么写
  • Win7系统如何清除流氓屏保
  • win7与ubuntu双系统
  • windows硬盘是什么意思
  • windows7不能使用的文件名
  • winpatrol.exe - winpatrol是什么进程
  • xp系统禁止程序联网
  • centos5.5网络配置
  • 桌面工具栏显示
  • macbookair怎么验证
  • win8怎么用
  • 阿J的cocos2d-x学习笔记-元素消消看(四)-可发展的空间及游戏开发中的问题
  • xtemplate node.js 的使用方法实例解析
  • 制作网站页面
  • Unity3D游戏开发pdf
  • python图片处理酷炫效果
  • python生成器send
  • 辽宁省电子税务局操作手册
  • 个人所得税税收政策2023最新规定
  • 2021西安雁塔区第一幼儿园运动会
  • 房屋维修基金会计分录处理
  • 营改增后如何纳税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设