Python 实现二叉搜索树插入、查找、删除结点算法

二叉搜索树(Binary Search Tree),又称为“二叉排序树”、“二叉查找树”。定义为:该树的每个结点都有一个作为搜索依据的关键码。对任意结点而言,其左子树(如果存在)上的每个结点的关键码均小于该结点的关键码,其右子树(如果存在)上的所有结点的关键码都大于该结点的关键码。

其中,根据二叉搜索树的定义,二叉树结点之间的关系可以通过结点间的位置关系来得到,常用的算法是分割式查找,查找结点的平均长度ASL = \frac{1}{n}\left ( n_{1}+ n_{2}+\cdots + n_{n}\right )

插入操作时,新插入的结点总是叶子结点,首先查找插入结点的父亲结点,再判断左右子树;

删除操作时,由于结点位置的不同,使得删除结点操作比较复杂,有多种情况需要考虑,主要包含三种:删除叶子结点、删除只有一个孩子的结点、删除左右孩子都有的结点,其中删除左右孩子都有的结点时,使用合并操作,查找被删除结点p的左子树中最右值最大的结点r,将结点r的右子树指向结点p的右子树的根,然后用结点p的左子树的根代替被删除的结点p,最后删除结点p。

 

例如:

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值