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实现发送email的几种常用方法
Aug 18 Python
Python 常用 PEP8 编码规范详解
Jan 22 Python
简单实现python数独游戏
Mar 30 Python
pandas.DataFrame选取/排除特定行的方法
Jul 03 Python
Python2实现的图片文本识别功能详解
Jul 11 Python
浅谈Python小波分析库Pywavelets的一点使用心得
Jul 09 Python
Django forms表单 select下拉框的传值实例
Jul 19 Python
django 使用 PIL 压缩图片的例子
Aug 16 Python
Python GUI自动化实现绕过验证码登录
Jan 10 Python
tensorflow 模型权重导出实例
Jan 24 Python
python属于解释语言吗
Jun 11 Python
Django限制API访问频率常用方法解析
Oct 12 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
文件系统基本操作类
2006/11/23 PHP
PHP extract 将数组拆分成多个变量的函数
2010/06/30 PHP
CodeIgniter框架验证码类库文件与用法示例
2017/03/18 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
2017/11/16 PHP
laravel5.6中的外键约束示例
2019/10/23 PHP
js去字符串前后空格5种实现方法及比较
2013/04/03 Javascript
JQuery中关于jquery.js与jquery.min.js的比较探讨
2013/05/15 Javascript
实例详解jQuery Mockjax 插件模拟 Ajax 请求
2016/01/12 Javascript
AngularJs自定义服务之实现签名和加密
2016/08/02 Javascript
Webpack的dll功能使用
2018/06/28 Javascript
js实现轮播图的完整代码
2020/10/26 Javascript
jQuery+vue.js实现的多选下拉列表功能示例
2019/01/15 jQuery
写一个Vue Popup组件
2019/02/25 Javascript
微信小程序遍历Echarts图表实现多个饼图
2019/04/25 Javascript
微信小程序上传文件到阿里OSS教程
2019/05/20 Javascript
简单了解微信小程序 e.target与e.currentTarget的不同
2019/09/27 Javascript
详解Vue的ref特性的使用
2020/01/24 Javascript
微信小程序中的上拉、下拉菜单功能
2020/03/13 Javascript
vue实现动态表格提交参数动态生成控件的操作
2020/11/09 Javascript
[02:29]DOTA2英雄基础教程 陈
2013/12/17 DOTA
[00:10]DOTA2全国高校联赛速递
2018/05/30 DOTA
pycharm 将django中多个app放到同个文件夹apps的处理方法
2018/05/30 Python
pytorch查看模型weight与grad方式
2020/06/24 Python
浅谈python锁与死锁问题
2020/08/14 Python
HTML5实现晶莹剔透的雨滴特效
2014/05/14 HTML / CSS
浅析canvas元素的html尺寸和css尺寸对元素视觉的影响
2019/07/22 HTML / CSS
HTML5 层的叠加的实现
2020/07/07 HTML / CSS
团员学习总结的自我评价范文
2013/10/14 职场文书
法务专员岗位职责
2014/01/02 职场文书
社区学雷锋活动策划方案
2014/01/30 职场文书
材料化学专业求职信
2014/07/15 职场文书
升学宴答谢词
2015/01/05 职场文书
好好学习保证书
2015/02/26 职场文书
关于开学的感想
2015/08/10 职场文书
python图像处理 PIL Image操作实例
2022/04/09 Python