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写asp详细讲解
Dec 16 Python
如何在Python中编写并发程序
Feb 27 Python
深入理解python对json的操作总结
Jan 05 Python
python opencv之SURF算法示例
Feb 24 Python
对Python 2.7 pandas 中的read_excel详解
May 04 Python
Python3爬虫学习之将爬取的信息保存到本地的方法详解
Dec 12 Python
python print输出延时,让其立刻输出的方法
Jan 07 Python
Python离线安装PIL 模块的方法
Jan 08 Python
关于Python形参打包与解包小技巧分享
Aug 24 Python
python pyinstaller打包exe报错的解决方法
Nov 02 Python
python+Django+pycharm+mysql 搭建首个web项目详解
Nov 29 Python
Python+PyQt5实现灭霸响指功能
May 25 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中10个不常见却非常有用的函数
2010/03/21 PHP
php分割合并两个字符串的函数实例
2015/06/19 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
Laravel中的Auth模块详解
2017/08/17 PHP
不错的一个日期输入 动态
2006/11/06 Javascript
这段js代码得节约你多少时间
2011/12/20 Javascript
jQuery对下拉框,单选框,多选框的操作
2014/02/21 Javascript
Node.js中AES加密和其它语言不一致问题解决办法
2014/03/10 Javascript
容易造成JavaScript内存泄露几个方面
2014/09/04 Javascript
Javascript基础教程之while语句
2015/01/18 Javascript
js制作网站首页图片轮播特效代码
2016/08/30 Javascript
解决AngualrJS页面刷新导致异常显示问题
2017/04/20 Javascript
JS身份证信息验证正则表达式
2017/06/12 Javascript
node跨域转发 express+http-proxy-middleware的使用
2018/05/31 Javascript
解决vue单页面应用中动态修改title问题
2019/06/09 Javascript
Vue.js桌面端自定义滚动条组件之美化滚动条VScroll
2020/12/01 Vue.js
使用Python判断IP地址合法性的方法实例
2014/03/13 Python
Python正则表达式使用经典实例
2016/06/21 Python
python中的格式化输出用法总结
2016/07/28 Python
python3 图片referer防盗链的实现方法
2018/03/12 Python
Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例
2018/04/19 Python
详解python如何在django中为用户模型添加自定义权限
2018/10/15 Python
浅谈pycharm下找不到sqlalchemy的问题
2018/12/03 Python
python打造爬虫代理池过程解析
2019/08/15 Python
Python数据可视化:幂律分布实例详解
2019/12/07 Python
利用jupyter网页版本进行python函数查询方式
2020/04/14 Python
经济学人订阅:The Economist
2018/07/19 全球购物
自我鉴定写作要点
2014/01/17 职场文书
职业女性的职业规划
2014/03/04 职场文书
对外汉语专业大学生职业生涯规划范文
2014/09/13 职场文书
2014党员学习习主席讲话思想汇报
2014/09/15 职场文书
银行委托书范本
2014/09/28 职场文书
个人批评与自我批评总结
2014/10/17 职场文书
2014年煤矿工作总结
2014/11/24 职场文书
企业法人代表证明书
2015/06/18 职场文书
Java基于字符界面的简易收银台
2021/06/26 Java/Android