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中的Classes和Metaclasses详解
Apr 02 Python
Python使用迭代器打印螺旋矩阵的思路及代码示例
Jul 02 Python
PyQt5打开文件对话框QFileDialog实例代码
Feb 07 Python
python奇偶行分开存储实现代码
Mar 19 Python
python实现逐个读取txt字符并修改
Dec 24 Python
python+selenium 定位到元素,无法点击的解决方法
Jan 30 Python
pycharm新建一个python工程步骤
Jul 16 Python
Django rstful登陆认证并检查session是否过期代码实例
Aug 13 Python
python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析
Sep 05 Python
Python tornado上传文件的功能
Mar 26 Python
python实现在列表中查找某个元素的下标示例
Nov 16 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 文件上传源码分析(RFC1867)
2009/10/30 PHP
PHP Error与Logging函数的深入理解
2013/06/03 PHP
浅析php工厂模式
2014/11/25 PHP
PHP实现的简单分页类及用法示例
2016/05/06 PHP
用PHP去掉文件头的Unicode签名(BOM)方法
2017/06/22 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
Laravel框架中集成MongoDB和使用详解
2019/10/17 PHP
Laravel框架之解决前端显示图片问题
2019/10/24 PHP
tp5框架前台无限极导航菜单类实现方法分析
2020/03/29 PHP
用javascript连接access数据库的方法
2006/11/17 Javascript
cssQuery()的下载与使用方法
2007/01/12 Javascript
用JavaScript对JSON进行模式匹配(Part 1-设计)
2010/07/17 Javascript
提取字符串中年月日的函数代码
2013/11/05 Javascript
javascript中几个容易混淆的概念总结
2015/04/14 Javascript
JavaScript实现页面5秒后自动跳转的方法
2015/04/16 Javascript
JS实现星星评分功能实例代码(两种方法)
2016/06/09 Javascript
JS获取和修改元素样式的实例代码
2016/08/06 Javascript
简单的jQuery拖拽排序效果的实现(增强动态)
2017/02/09 Javascript
深入理解vue中slot与slot-scope的具体使用
2018/01/26 Javascript
vue 项目打包通过命令修改 vue-router 模式 修改 API 接口前缀
2018/06/13 Javascript
vue生成token并保存到本地存储中
2018/07/17 Javascript
使用 vue 实例更好的监听事件及vue实例的方法
2019/04/22 Javascript
Openlayers显示地理位置坐标的方法
2020/09/28 Javascript
开始着手第一个Django项目
2015/07/15 Python
python list数据等间隔抽取并新建list存储的例子
2019/11/27 Python
Python telnet登陆功能实现代码
2020/04/16 Python
浅析Python 序列化与反序列化
2020/08/05 Python
自动化专业职业生涯规划书范文
2014/01/16 职场文书
电子信息专业自荐书
2014/02/04 职场文书
个人委托书如何写
2014/09/25 职场文书
县人大领导班子四风对照检查材料思想汇报
2014/10/09 职场文书
2014年党建工作汇报材料
2014/10/27 职场文书
教师党的群众路线教育实践活动学习笔记
2014/11/05 职场文书
2014年统计工作总结
2014/11/21 职场文书
2016年少先队活动总结
2016/04/06 职场文书
Java 在线考试云平台的实现
2021/11/23 Java/Android