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实现下载整个ftp目录的方法
Jan 17 Python
使用Python操作excel文件的实例代码
Oct 15 Python
基于python的多进程共享变量正确打开方式
Apr 28 Python
python绘制中国大陆人口热力图
Nov 07 Python
对python中字典keys,values,items的使用详解
Feb 03 Python
Python实战购物车项目的实现参考
Feb 20 Python
python实现二维数组的对角线遍历
Mar 02 Python
python for和else语句趣谈
Jul 02 Python
详解python内置常用高阶函数(列出了5个常用的)
Feb 21 Python
基于python图像处理API的使用示例
Apr 03 Python
通过实例解析python创建进程常用方法
Jun 19 Python
python实现猜拳游戏项目
Nov 30 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桌面中心(四) 数据显示
2007/03/11 PHP
追求程序速度,而不是编程的速度
2008/04/23 PHP
PHP 线程安全与非线程安全版本的区别深入解析
2013/08/06 PHP
jQuery Mobile + PHP实现文件上传
2014/12/12 PHP
Dom 结点创建 基础知识
2011/10/01 Javascript
Javascript实现获取窗口的大小和位置代码分享
2014/12/04 Javascript
javascript中setTimeout使用指南
2015/07/26 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
2015/12/04 Javascript
JS+CSS3模拟溢出滚动效果
2016/08/12 Javascript
vue获取input输入值的问题解决办法
2017/10/17 Javascript
详解JavaScript 为什么要有 Symbol 类型?
2019/04/03 Javascript
vue+element 模态框表格形式的可编辑表单实现
2019/06/07 Javascript
vue-cli3配置与跨域处理方法
2019/08/17 Javascript
vue vantUI实现文件(图片、文档、视频、音频)上传(多文件)
2019/10/15 Javascript
vue 开发之路由配置方法详解
2019/12/02 Javascript
JS中队列和双端队列实现及应用详解
2020/09/29 Javascript
js实现限定区域范围拖拉拽效果
2020/11/20 Javascript
JS数组索引检测中的数据类型问题详解
2021/01/11 Javascript
在Python程序中操作MySQL的基本方法
2015/07/29 Python
全面了解Nginx, WSGI, Flask之间的关系
2018/01/09 Python
selenium python浏览器多窗口处理代码示例
2018/01/15 Python
Python随机函数random()使用方法小结
2018/04/29 Python
python3中的md5加密实例
2018/05/29 Python
Python中pip更新和三方插件安装说明
2018/07/08 Python
浅谈python3发送post请求参数为空的情况
2018/12/28 Python
ipython jupyter notebook中显示图像和数学公式实例
2020/04/15 Python
pyecharts在数据可视化中的应用详解
2020/06/08 Python
Python多线程threading创建及使用方法解析
2020/06/17 Python
python 中关于pycharm选择运行环境的问题
2020/10/31 Python
如何利用python生成MD5并去重
2020/12/07 Python
python元组拆包实现方法
2021/02/28 Python
你可能不熟练的十个前端HTML5经典面试题
2018/07/03 HTML / CSS
利达恒信公司.NET笔试题面试题
2016/03/05 面试题
幽默自我介绍演讲稿
2014/08/21 职场文书
求职推荐信范文
2015/03/27 职场文书
python中pd.cut()与pd.qcut()的对比及示例
2022/06/16 Python