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中的zip函数使用示例
Jan 29 Python
简单讲解Python中的数字类型及基本的数学计算
Mar 11 Python
Python中关键字nonlocal和global的声明与解析
Mar 12 Python
在python中使用正则表达式查找可嵌套字符串组
Oct 24 Python
Python测试网络连通性示例【基于ping】
Aug 03 Python
Django contenttypes 框架详解(小结)
Aug 13 Python
实例讲解Python脚本成为Windows中运行的exe文件
Jan 24 Python
Python中按值来获取指定的键
Mar 04 Python
在Python中append以及extend返回None的例子
Jul 20 Python
python画蝴蝶曲线图的实例
Nov 21 Python
opencv设置采集视频分辨率方式
Dec 10 Python
python实现udp传输图片功能
Mar 20 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
html中select语句读取mysql表中内容
2006/10/09 PHP
php取整函数ceil,floo,round的用法及介绍
2013/08/31 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十三)
2014/06/26 PHP
PHP 根据key 给二维数组分组
2016/12/09 PHP
PHP抽象类与接口的区别详解
2019/03/21 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
2019/10/15 PHP
yii2.0框架实现上传excel文件后导入到数据库的方法示例
2020/04/13 PHP
javascript 学习之旅 (2)
2009/02/05 Javascript
js 弹出框 替代浏览器的弹出框
2010/10/29 Javascript
javascript权威指南 学习笔记之变量作用域分享
2011/09/28 Javascript
判断js对象是否拥有某一个属性的js代码
2013/08/16 Javascript
jQuery焦点图插件SaySlide
2015/12/21 Javascript
AngularJS基础 ng-keyup 指令简单示例
2016/08/02 Javascript
微信小程序 css使用技巧总结
2017/01/09 Javascript
微信运维交互机器人的示例代码
2018/11/12 Javascript
vue组件之间的数据传递方法详解
2019/04/19 Javascript
深入分析JavaScript 事件循环(Event Loop)
2020/06/19 Javascript
0基础学习前端开发的一些建议
2020/07/14 Javascript
vue v-for出来的列表,点击某个li使得当前被点击的li字体变红操作
2020/07/17 Javascript
javascript递归函数定义和用法示例分析
2020/07/22 Javascript
[48:30]LGD vs infamous Supermajor小组赛D组 BO3 第一场 6.3
2018/06/04 DOTA
python正则实现计算器功能
2017/12/14 Python
python将list转为matrix的方法
2018/12/12 Python
python之pyqt5通过按钮改变Label的背景颜色方法
2019/06/13 Python
django 微信网页授权认证api的步骤详解
2019/07/30 Python
Python使用selenium + headless chrome获取网页内容的方法示例
2019/10/16 Python
HTML5+CSS3实现无插件拖拽上传图片(支持预览与批量)
2017/01/05 HTML / CSS
Lyle & Scott苏格兰金鹰官网:英国皇室御用品牌
2018/05/09 全球购物
澳大利亚汽车零部件、音响及配件超市:Automotive Superstore
2018/06/19 全球购物
Raffaello Network西班牙:意大利拉斐尔时尚购物网
2019/03/12 全球购物
Delphi软件工程师试题
2013/01/29 面试题
班级德育工作实施方案
2014/02/21 职场文书
会计电算化专业自荐信
2014/03/15 职场文书
邮政竞聘演讲稿
2014/09/03 职场文书
法务专员岗位职责
2015/02/14 职场文书
护理自荐信
2019/05/14 职场文书