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 Web框架Flask信号机制(signals)介绍
Jan 01 Python
python psutil库安装教程
Mar 19 Python
Django项目中model的数据处理以及页面交互方法
May 30 Python
Pycharm导入Python包,模块的图文教程
Jun 13 Python
python tkinter界面居中显示的方法
Oct 11 Python
Flask框架工厂函数用法实例分析
May 25 Python
Python发展史及网络爬虫
Jun 19 Python
Python操作列表常用方法实例小结【创建、遍历、统计、切片等】
Oct 25 Python
pytorch简介
Nov 11 Python
python实现简单反弹球游戏
Apr 12 Python
Python爬取用户观影数据并分析用户与电影之间的隐藏信息!
Jun 29 Python
python中tkinter复选框使用操作
Nov 11 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 编程的 5个良好习惯
2009/02/20 PHP
php中拷贝构造函数、赋值运算符重载
2012/07/25 PHP
php实现上传图片保存到数据库的方法
2015/02/11 PHP
PHP重定向与伪静态区别
2017/02/19 PHP
TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析
2019/12/31 PHP
JavaScript下通过的XMLHttpRequest发送请求的代码
2011/06/28 Javascript
jquery中邮箱地址 URL网站地址正则验证实例代码
2013/09/15 Javascript
给超链接添加特效鼠标移动展示提示信息且随鼠标移动
2013/10/17 Javascript
在AngularJS应用中实现一些动画效果的代码
2015/06/18 Javascript
JavaScript中数组去除重复的三种方法
2016/04/22 Javascript
JS 清除字符串数组中,重复元素的实现方法
2016/05/24 Javascript
原生JS简单实现ajax的方法示例
2016/11/29 Javascript
jquery图片放大镜效果
2017/06/23 jQuery
react-router4 配合webpack require.ensure 实现异步加载的示例
2018/01/18 Javascript
Node.js实现一个HTTP服务器的方法示例
2019/05/13 Javascript
swiper Scrollbar滚动条组件详解
2019/09/08 Javascript
[04:42]2015国际邀请赛CDEC战队晋级之路
2015/08/13 DOTA
wxPython学习之主框架实例
2014/09/28 Python
举例讲解如何在Python编程中进行迭代和遍历
2016/01/19 Python
python实现闹钟定时播放音乐功能
2018/01/25 Python
selenium + python 获取table数据的示例讲解
2018/10/13 Python
python将.ppm格式图片转换成.jpg格式文件的方法
2018/10/27 Python
Python的log日志功能及设置方法
2019/07/11 Python
30行Python代码实现高分辨率图像导航的方法
2020/05/22 Python
Django搭建项目实战与避坑细节详解
2020/12/06 Python
ASOS比利时:英国线上零售商及自有品牌
2018/07/29 全球购物
俄罗斯第一家多品牌在线奢侈品精品店:Aizel.ru
2020/09/06 全球购物
开办加工厂创业计划书
2014/01/03 职场文书
工商局副局长个人对照检查材料
2014/09/25 职场文书
民主评议政风行风活动心得体会
2014/10/29 职场文书
乡镇群众路线专项整治方案
2014/11/03 职场文书
计划生育个人总结
2015/03/02 职场文书
新兵入伍决心书
2015/09/22 职场文书
Python制作一个随机抽奖小工具的实现
2021/07/07 Python
nginx安装以及配置的详细过程记录
2021/09/15 Servers
nginx之queue的具体使用
2022/06/28 Servers