python实现二叉查找树实例代码


Posted in Python onFebruary 08, 2018

本文研究的主要是python实现二叉查找树的相关内容,具体介绍及实现如下。

1. 二叉查找树的定义:

左子树不为空的时候,左子树的结点值小于根节点,右子树不为空时,右子树的结点值大于根节点,左右子树分别为二叉查找树

2. 二叉查找树的最左边的结点即为最小值,要查找最小值,只需遍历左子树的结点直到为空为止,同理,最右边的结点结尾最大值,要查找最大值,只需遍历右子树的结点直到为空为止。二叉查找树的插入查找和删除都是通过递归的方式来实现的,删除一个结点的时候,先找到这个结点S,如果这个结点左右孩子都不为空,这时并不是真正的删除这个结点S,而是在其右子树找到后继结点,将后继结点的值付给S,然后删除这个后继结点即可。如果结点S的左孩子或者右孩子为空,可以直接删除这个结点S。

3. 二叉查找树的python实现:

class TreeNode: 
  def __init__(self,val): 
    self.val=val; 
    self.left=None; 
    self.right=None; 
def insert(root,val): 
  if root is None: 
    root=TreeNode(val); 
  else: 
    if val<root.val: 
      root.left=insert(root.left,val);  #递归地插入元素 
    elif val>root.val: 
      root.right=insert(root.right,val);  
  return root; 
 
def query(root,val): 
  if root is None: 
    return ; 
  if root.val is val: 
    return 1; 
  if root.val <val: 
    return query(root.right,val); #递归地查询 
  else:  
    return query(root.left,val); 
def findmin(root): 
  if root.left: 
    return findmin(root.left); 
  else: 
    return root; 
   
def delnum(root,val): 
  if root is None: 
    return ; 
  if val<root.val: 
    return delnum(root.left,val); 
  elif val>root.val: 
    return delnum(root.right,val); 
  else:                       # 删除要区分左右孩子是否为空的情况 
    if(root.left and root.right): 
       
      tmp=finmin(root.right);       #找到后继结点 
      root.val=tmp.val; 
      root.right=delnum(root.right,val);  #实际删除的是这个后继结点 
       
    else: 
      if root.left is None: 
        root=root.right; 
      elif root.right is None: 
        root=root.left; 
  return root; 
         
         
#测试代码       
root=TreeNode(3); 
root=insert(root,2); 
root=insert(root,1); 
root=insert(root,4); 
 
#print query(root,3); 
print query(root,1); 
root=delnum(root,1); 
print query(root,1);

结果:

1
None
>>>

总结

以上就是本文关于python实现二叉查找树实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
python生成器的使用方法
Nov 21 Python
Python爬取三国演义的实现方法
Sep 12 Python
Python应用03 使用PyQT制作视频播放器实例
Dec 07 Python
5个很好的Python面试题问题答案及分析
Jan 19 Python
对Python实现简单的API接口实例讲解
Dec 10 Python
为什么从Python 3.6开始字典有序并效率更高
Jul 15 Python
Python3分析处理声音数据的例子
Aug 27 Python
用python中的matplotlib绘制方程图像代码
Nov 21 Python
基于python爬取梨视频实现过程解析
Nov 09 Python
怎么用Python识别手势数字
Jun 07 Python
Python数据可视化之基于pyecharts实现的地理图表的绘制
Jun 10 Python
python 多态 协议 鸭子类型详解
Nov 27 Python
单链表反转python实现代码示例
Feb 08 #Python
Python测试人员需要掌握的知识
Feb 08 #Python
python实现单向链表详解
Feb 08 #Python
Python生成器以及应用实例解析
Feb 08 #Python
代码分析Python地图坐标转换
Feb 08 #Python
python爬虫中get和post方法介绍以及cookie作用
Feb 08 #Python
Python OpenCV 直方图的计算与显示的方法示例
Feb 08 #Python
You might like
色色整理的PHP面试题集锦
2012/03/08 PHP
破解.net程序(dll文件)编译和反编译方法
2013/01/31 PHP
PHP设计模式之原型模式定义与用法详解
2018/04/03 PHP
PHP 命名空间和自动加载原理与用法实例分析
2020/04/29 PHP
学习ExtJS accordion布局
2009/10/08 Javascript
jquery 年会抽奖程序
2011/12/22 Javascript
javascript中将Object转换为String函数代码 (json str)
2012/04/29 Javascript
面向对象Javascript核心支持代码分享
2012/05/23 Javascript
Ext JS 4官方文档之三 -- 类体系概述与实践
2012/12/16 Javascript
js图片向右一张张滚动效果实例代码
2013/11/23 Javascript
jquery validate添加自定义验证规则(验证邮箱 邮政编码)
2013/12/04 Javascript
node.js实现多图片上传实例
2014/06/03 Javascript
javascript中Function类型详解
2015/04/28 Javascript
Javascript控制div属性动态变化实例分析
2015/10/08 Javascript
利用jquery实现下拉框的禁用与启用
2016/12/07 Javascript
jquery replace方法去空格
2017/05/08 jQuery
vue的事件绑定与方法详解
2017/08/16 Javascript
了解ESlint和其相关操作小结
2018/05/21 Javascript
clipboard.js在移动端复制失败的解决方法
2018/06/13 Javascript
关于layui导航栏不展示下拉列表的解决方法
2019/09/25 Javascript
原生JS实现烟花效果
2020/03/10 Javascript
[38:44]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第二局
2016/02/25 DOTA
用map函数来完成Python并行任务的简单示例
2015/04/02 Python
详解tensorflow训练自己的数据集实现CNN图像分类
2018/02/07 Python
详解Python 爬取13个旅游城市,告诉你五一大家最爱去哪玩?
2019/05/07 Python
python中 * 的用法详解
2019/07/10 Python
flask框架jinja2模板与模板继承实例分析
2019/08/01 Python
python打包成so文件过程解析
2019/09/28 Python
PYQT5 vscode联合操作qtdesigner的方法
2020/03/24 Python
python list等分并从等分的子集中随机选取一个数
2020/11/16 Python
Internal修饰符有什么含义
2013/07/10 面试题
三下乡活动方案
2014/01/31 职场文书
2014年新教师工作总结
2014/11/08 职场文书
优秀共青团员事迹材料
2014/12/25 职场文书
小型婚礼主持词
2015/06/30 职场文书
环境卫生整治简报
2015/07/20 职场文书