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 相关文章推荐
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
Jan 17 Python
Python模仿POST提交HTTP数据及使用Cookie值的方法
Nov 10 Python
使用IPython来操作Docker容器的入门指引
Apr 08 Python
python 根据正则表达式提取指定的内容实例详解
Dec 04 Python
基于循环神经网络(RNN)的古诗生成器
Mar 26 Python
Django框架模板用法入门教程
Nov 04 Python
pytorch:torch.mm()和torch.matmul()的使用
Dec 27 Python
tensorflow入门:tfrecord 和tf.data.TFRecordDataset的使用
Jan 20 Python
python通过文本在一个图中画多条线的实例
Feb 21 Python
Python使用random模块实现掷骰子游戏的示例代码
Apr 29 Python
基于flask实现五子棋小游戏
May 25 Python
如何理解及使用Python闭包
Jun 01 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
我的论坛源代码(十)
2006/10/09 PHP
php中用socket模拟http中post或者get提交数据的示例代码
2013/08/08 PHP
windwos下使用php连接oracle数据库的过程分享
2014/05/26 PHP
PHP将Excel导入数据库及数据库数据导出至Excel的方法
2015/06/24 PHP
JavaScript使用cookie
2007/02/02 Javascript
Javascript与flash交互通信基础教程
2008/08/07 Javascript
另一个javascript小测验(代码集合)
2011/07/27 Javascript
JavaScript中的undefined学习总结
2013/11/30 Javascript
JavaScript通过正则表达式实现表单验证电话号码
2014/03/07 Javascript
js实现浏览器窗口大小被改变时触发事件的方法
2015/02/02 Javascript
JavaScript将base64图片转换成formData并通过AJAX提交的实现方法
2016/10/24 Javascript
Vue.js开发环境搭建
2016/11/10 Javascript
bootstrap配合Masonry插件实现瀑布式布局
2017/01/18 Javascript
通过封装scroll.js 获取滚动条的值
2018/07/13 Javascript
在layui.use 中自定义 function 的正确方法
2019/09/16 Javascript
Vue常用的全选/反选的示例代码
2020/02/19 Javascript
python创建和使用字典实例详解
2013/11/01 Python
python网络编程调用recv函数完整接收数据的三种方法
2017/03/31 Python
Python3中详解fabfile的编写
2018/06/24 Python
对python dataframe逻辑取值的方法详解
2019/01/30 Python
python实现Excel文件转换为TXT文件
2019/04/28 Python
python 图片去噪的方法示例
2019/07/09 Python
python pip源配置,pip配置文件存放位置的方法
2019/07/12 Python
Python自动生成代码 使用tkinter图形化操作并生成代码框架
2019/09/18 Python
python 实现弹球游戏的示例代码
2020/11/17 Python
美国摩托车头盔、零件、齿轮及配件商店:Cycle Gear
2019/06/12 全球购物
什么是.net的Remoting技术
2016/07/08 面试题
大专自我鉴定范文
2013/10/01 职场文书
银行职员思想汇报
2013/12/31 职场文书
《夜晚的实验》教学反思
2014/02/19 职场文书
给老婆大人的检讨书
2014/02/24 职场文书
4s店市场专员岗位职责
2014/04/09 职场文书
企业群众路线教育实践活动心得体会
2014/11/03 职场文书
幼儿园开学报名通知
2015/07/16 职场文书
MySQL创建管理子分区
2022/04/13 MySQL
MySQL GTID复制的具体使用
2022/05/20 MySQL