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 相关文章推荐
利用打码兔和超人打码自封装的打码类分享
Mar 16 Python
一个小示例告诉你Python语言的优雅之处
Jul 04 Python
Python使用函数默认值实现函数静态变量的方法
Aug 18 Python
Python中的进程分支fork和exec详解
Apr 11 Python
利用Python中的输入和输出功能进行读取和写入的教程
Apr 14 Python
Python+django实现简单的文件上传
Aug 17 Python
Python3简单实例计算同花的概率代码
Dec 06 Python
Python实现pdf文档转txt的方法示例
Jan 19 Python
基于python实现文件加密功能
Jan 06 Python
Django重设Admin密码过程解析
Feb 10 Python
Anaconda+vscode+pytorch环境搭建过程详解
May 25 Python
python用opencv 图像傅里叶变换
Jan 04 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如何解决网站大流量与高并发的问题
2011/06/25 PHP
部署PHP时的4个配置修改说明
2015/10/19 PHP
Django中的cookie与session操作实例代码
2017/08/17 PHP
laravel 创建命令行命令的图文教程
2019/10/23 PHP
jquery pagination插件实现无刷新分页代码
2009/10/13 Javascript
自己整理的一个javascript日期处理函数
2010/10/16 Javascript
Jquery的hide及toggle方法让超链接慢慢消失
2013/09/06 Javascript
jquery中对于批量deferred的处理方法
2014/01/22 Javascript
js分页代码分享
2014/04/28 Javascript
nodejs获取本机内网和外网ip地址的实现代码
2014/06/01 NodeJs
jQuery使用removeClass方法删除元素指定Class的方法
2015/03/26 Javascript
第一次接触神奇的Bootstrap网格系统
2016/07/27 Javascript
轻松掌握JavaScript装饰者模式
2016/08/27 Javascript
简单理解vue中Props属性
2016/10/27 Javascript
利用ES6语法重构React组件详解
2017/03/02 Javascript
五步轻松实现JavaScript HTML时钟效果
2020/03/25 Javascript
js中getBoundingClientRect的作用及兼容方案详解
2018/02/01 Javascript
javascript高仿热血传奇游戏实现代码
2018/02/22 Javascript
详解vue2.0 不同屏幕适配及px与rem转换问题
2018/02/23 Javascript
Vue.js自定义事件的表单输入组件方法
2018/03/08 Javascript
基于Vue实现拖拽效果
2018/04/27 Javascript
vue 内置过滤器的使用总结(附加自定义过滤器)
2018/12/11 Javascript
JS/jQuery实现简单的开关灯效果【案例】
2019/02/19 jQuery
微信小程序个人中心的列表控件实现代码
2020/04/26 Javascript
[47:03]完美世界DOTA2联赛PWL S3 access vs LBZS 第一场 12.20
2020/12/23 DOTA
Python使用scrapy采集数据时为每个请求随机分配user-agent的方法
2015/04/08 Python
Djang中静态文件配置方法
2015/07/30 Python
Python正则表达式分组概念与用法详解
2017/06/24 Python
创建pycharm的自定义python模板方法
2018/05/23 Python
Python爬虫实现(伪)球迷速成
2018/06/10 Python
python实现遍历文件夹图片并重命名
2020/03/23 Python
县委常委班子对照检查材料思想汇报
2014/09/28 职场文书
导游词之重庆钓鱼城
2019/09/19 职场文书
Nginx配置并兼容HTTP实现代码解析
2021/03/31 Servers
详解Javascript实践中的命令模式
2021/05/05 Javascript
OpenCV绘制圆端矩形的示例代码
2021/08/30 Python