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中处理字符串之isdecimal()方法的使用
May 20 Python
Python smallseg分词用法实例分析
May 28 Python
python插入排序算法实例分析
Jul 03 Python
python 时间戳与格式化时间的转化实现代码
Mar 23 Python
Python网络爬虫实例讲解
Apr 28 Python
Python实现将sqlite数据库导出转成Excel(xls)表的方法
Jul 17 Python
python使用super()出现错误解决办法
Aug 14 Python
python中类的属性和方法介绍
Nov 27 Python
对python使用telnet实现弱密码登录的方法详解
Jan 26 Python
python的命名规则知识点总结
Oct 04 Python
Python3 shutil(高级文件操作模块)实例用法总结
Feb 19 Python
浅谈Python响应式类库RxPy
Jun 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
神族 PROTOSS 概述
2020/03/14 星际争霸
支持oicq头像的留言簿(一)
2006/10/09 PHP
轻松修复Discuz!数据库
2008/05/03 PHP
学习php设计模式 php实现策略模式(strategy)
2015/12/07 PHP
PHPExcel笔记, mpdf导出
2016/05/03 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
2017/05/30 PHP
laravel获取不到session的三种解决办法【推荐】
2018/09/16 PHP
Thinkphp 框架扩展之Widget扩展实现方法分析
2020/04/23 PHP
javaScript函数中执行C#代码中的函数方法总结
2013/08/07 Javascript
JS延迟加载加快页面打开速度示例代码
2013/12/30 Javascript
JS实现单行文字不间断向上滚动的方法
2015/01/29 Javascript
AngularJS 简单应用实例
2016/07/28 Javascript
JS 在数组指定位置插入/删除数据的方法
2017/01/12 Javascript
jquery hover 不停闪动问题的解决方法(亦为stop()的使用)
2017/02/10 Javascript
JS基于onclick事件实现单个按钮的编辑与保存功能示例
2017/02/13 Javascript
js实现网页的两个input标签内的数值加减(示例代码)
2017/08/15 Javascript
原生JS实现的碰撞检测功能示例
2018/05/18 Javascript
微信小程序如何实现在线客服功能
2019/10/16 Javascript
Vue+ElementUI使用vue-pdf实现预览功能
2019/11/26 Javascript
详解vue 组件
2020/06/11 Javascript
详解vue中v-model和v-bind绑定数据的异同
2020/08/10 Javascript
Python 3.x 新特性及10大变化
2015/06/12 Python
python爬虫之验证码篇3-滑动验证码识别技术
2019/04/11 Python
python实时检测键盘输入函数的示例
2019/07/17 Python
python程序文件扩展名知识点详解
2020/02/27 Python
Python Scrapy多页数据爬取实现过程解析
2020/06/12 Python
Python变量及数据类型用法原理汇总
2020/08/06 Python
python连接手机自动搜集蚂蚁森林能量的实现代码
2021/02/24 Python
塔吉特百货公司官网:Target
2017/04/27 全球购物
巴西葡萄酒商店:Divvino
2020/02/22 全球购物
自我评价的范文
2014/02/02 职场文书
保护环境建议书300字
2014/05/13 职场文书
春节慰问信范文
2015/02/15 职场文书
2019年亲子运动会口号
2019/10/11 职场文书
您对思维方式了解多少?
2019/12/09 职场文书
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
2021/08/30 Python