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 IDLE加上自动补全和历史功能
Nov 30 Python
Python实现遍历数据库并获取key的值
May 17 Python
python matplotlib 注释文本箭头简单代码示例
Jan 08 Python
Python实现繁体中文与简体中文相互转换的方法示例
Dec 18 Python
浅析Python与Mongodb数据库之间的操作方法
Jul 01 Python
对python特殊函数 __call__()的使用详解
Jul 02 Python
Python IDE Pycharm中的快捷键列表用法
Aug 08 Python
Python Scrapy框架第一个入门程序示例
Feb 05 Python
python框架flask入门之环境搭建及开启调试
Jun 07 Python
为什么称python为胶水语言
Jun 16 Python
爬虫代理的cookie如何生成运行
Sep 22 Python
pycharm进入时每次都是insert模式的解决方式
Feb 05 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
apache集成php7.3.5的详细步骤
2019/06/20 PHP
php项目中类的自动加载实例讲解
2019/09/12 PHP
javascript是怎么继承的介绍
2012/01/05 Javascript
深入理解JavaScript是如何实现继承的
2013/12/12 Javascript
javascript学习笔记--数字格式类型
2014/05/22 Javascript
js如何判断用户是否是用微信浏览器
2014/06/05 Javascript
javascript简单实现图片预加载
2014/12/03 Javascript
JavaScript Math.ceil 方法(对数值向上取整)
2015/01/09 Javascript
JQuery中两个ul标签的li互相移动实现方法
2015/05/18 Javascript
如何利用JS通过身份证号获取当事人的生日、年龄、性别
2016/01/22 Javascript
JS实现复制内容到剪贴板功能兼容所有浏览器(推荐)
2016/06/17 Javascript
vue.js语法及常用指令
2017/10/29 Javascript
jquery的 filter()方法使用教程
2018/03/22 jQuery
微信小程序制作表格的方法
2019/02/14 Javascript
vue框架下部署上线后刷新报404问题的解决方案(推荐)
2019/04/03 Javascript
Vue中computed和watch有哪些区别
2020/12/19 Vue.js
[00:55]2015国际邀请赛中国区预选赛5月23日——28日约战上海
2015/05/25 DOTA
[53:50]CHAOS vs Mineski 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
利用python写个下载teahour音频的小脚本
2017/05/08 Python
Python之批量创建文件的实例讲解
2018/05/10 Python
django反向解析URL和URL命名空间的方法
2018/06/05 Python
乌克兰电子和家用电器商店:Foxtrot
2019/07/23 全球购物
网上快餐厅创业计划书
2014/02/01 职场文书
见习期自我鉴定范文
2014/03/19 职场文书
金融事务专业求职信
2014/04/25 职场文书
查摆问题自我剖析材料
2014/08/18 职场文书
前台岗位职责
2015/02/13 职场文书
辞职信如何写
2015/02/27 职场文书
统计员岗位职责范本
2015/04/14 职场文书
2015年酒店前台工作总结
2015/04/20 职场文书
《去年的树》教学反思
2016/02/18 职场文书
2016年第16个全民国防教育日宣传活动总结
2016/04/05 职场文书
Go语言-为什么返回值为接口类型,却返回结构体
2021/04/24 Golang
Java基础之详解HashSet的使用方法
2021/06/30 Java/Android
十大最强水系宝可梦,最美宝可梦排第三,榜首大家最熟悉
2022/03/18 日漫
Android Gradle 插件自定义Plugin实现注意事项
2022/06/16 Java/Android