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判断IP地址合法性的方法实例
Mar 13 Python
深入浅析Python中join 和 split详解(推荐)
Jun 30 Python
Python Tkinter实现简易计算器功能
Jan 30 Python
python flask中静态文件的管理方法
Mar 20 Python
详解Python 定时框架 Apscheduler原理及安装过程
Jun 14 Python
python实现简单日志记录库glog的使用
Dec 13 Python
Python和Sublime整合过程图示
Dec 25 Python
python归并排序算法过程实例讲解
Nov 04 Python
Python try except else使用详解
Jan 12 Python
Python基于Opencv识别两张相似图片
Apr 25 Python
python文件目录操作之os模块
May 08 Python
Python爬虫:从m3u8文件里提取小视频的正确操作
May 14 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
Oracle 常见问题解答
2006/10/09 PHP
一个程序下载的管理程序(三)
2006/10/09 PHP
PHP开发中的错误收集,不定期更新。
2011/02/03 PHP
PHP简单实现正则匹配省市区的方法
2018/04/13 PHP
详细讲解JS节点知识
2010/01/31 Javascript
jquery改变tr背景色的示例代码
2013/12/28 Javascript
jquery制作搜狐快站页面效果示例分享
2014/02/21 Javascript
js 3秒后跳转页面的实现代码
2014/03/10 Javascript
html5+javascript制作简易画板附图
2014/04/25 Javascript
一个简单的实现下拉框多选的插件可移植性比较好
2014/05/05 Javascript
javascript数据结构与算法之检索算法
2015/04/04 Javascript
jQuery 中ajax异步调用的四种方式
2016/06/28 Javascript
ReactNative-JS 调用原生方法实例代码
2016/10/08 Javascript
angularjs的select使用及默认选中设置
2017/04/08 Javascript
vue移动端裁剪图片结合插件Cropper的使用实例代码
2017/07/10 Javascript
js+html获取系统当前时间
2017/11/10 Javascript
JS+HTML+CSS实现轮播效果
2017/11/28 Javascript
windows下create-react-app 升级至3.3.1版本踩坑记
2020/02/17 Javascript
[58:57]2018DOTA2亚洲邀请赛3月29日小组赛B组 Effect VS VGJ.T
2018/03/30 DOTA
Python上传package到Pypi(代码简单)
2016/02/06 Python
Python基于opencv的图像压缩算法实例分析
2018/05/03 Python
分析经典Python开发工程师面试题
2019/04/08 Python
python 比较字典value的最大值的几种方法
2020/04/17 Python
python能开发游戏吗
2020/06/11 Python
详解selenium + chromedriver 被反爬的解决方法
2020/10/28 Python
详解css3自定义滚动条样式写法
2017/12/25 HTML / CSS
html5 桌面提醒:Notifycations应用介绍
2012/11/27 HTML / CSS
戴尔英国翻新电脑和电子产品:Dell UK Refurbished Computers
2019/07/30 全球购物
Fanatics官网:运动服装、球衣、运动装备
2020/10/12 全球购物
介绍一下EJB的分类及其各自的功能及应用
2016/08/23 面试题
函授本科自我鉴定
2013/11/03 职场文书
高中生期中考试失利检讨书
2014/10/23 职场文书
2015年医院工作总结范文
2015/04/09 职场文书
2015年行政人事工作总结
2015/05/21 职场文书
python数字转对应中文的方法总结
2021/08/02 Python
深入理解 Golang 的字符串
2022/05/04 Golang