Python实现二叉搜索树BST的方法示例


Posted in Python onJuly 30, 2019

二叉排序树(BST)又称二叉查找树、二叉搜索树

二叉排序树(Binary Sort Tree)又称二叉查找树。它或者是一棵空树;或者是具有下列性质的二叉树:

1.若左子树不空,则左子树上所有结点的值均小于根结点的值;
2.若右子树不空,则右子树上所有结点的值均大于根节点的值;
3.左、右子树也分别为二叉排序树。

  • 求树深度
  • 按序输出节点值(使用中序遍历)
  • 查询二叉搜索树中一个具有给点关键字的结点,返回该节点的位置。时间复杂度是O(h),h是树的高度。
  • 递归/迭代求最大关键字元素
  • 递归/迭代求最小关键字元素
# -*- coding:utf-8 -*-
'''
用Python实现二叉搜索树。
'''


class Node():
  def __init__(self, x):
    self.val = x
    self.left = None
    self.right = None

#求树的深度
def depth(root):
    if root is None:
      return 0
    else:
      return 1 + max(depth(root.left), depth(root.right))


#按序输出结点值(中序遍历)
def input_in_order(root):
  if root is None:
    return
  input_in_order(root.left)
  print(root.val)
  input_in_order(root.right)



#(递归实现 、迭代实现)查询二叉搜索树中一个具有给点关键字的结点,返回该节点的位置。时间复杂度是O(h),h是树的高度。
#递归实现
def search1(root, value):
  if root is None or root.val == value:
    return root
  if root.val > value:
    return search1(root.left, value)
  if root.val < value:
    return search1(root.right, value)


#迭代实现
def search2(root, value):
  while root != None and root.val != value:
    if root.val > value:
      root = root.left
    elif root.val < value:
      root = root.right
  return root


#求最大关键字元素
#迭代实现
def max_value1(root):
  while root != None and root.left != None:
    root = root.right
  if root is None:
    return root
  else:
    return root.val

#递归实现
def max_value2(root):
  if root == None:
    return root
  elif root.right == None:
    return root.val
  else:
    return max_value2(root.right)


#求最小关键字元素
#递归实现
def min_value1(root):
  if root is None:
    return root
  elif root.left is None:
    return root.val
  else:
    return min_value1(root.left)


#迭代实现
def min_value2(root):
  if root is None:
    return root
  while root.left !=None:
    root = root.left
  return root.val


if __name__ == '__main__':
  a = Node(15)
  b = Node(6)
  c = Node(18)
  d = Node(4)
  e = Node(8)
  f = Node(17)
  g = Node(20)
  h = Node(13)
  i = Node(9)
  a.left = b
  a.right = c
  b.left = d
  b.right = e
  c.left = f
  c.right = g
  e.right = h
  h.left = i
  print(search1(a, 13))
  print(search2(a,13))
  print(max_value1(a))
  print(max_value2(a))
  print(min_value1(a))
  print(min_value2(a))

ps:从二叉查找树BST中查找元素X,返回其所在结点的地址,查找的次数取决于树的高度。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现2014火车票查询代码分享
Jan 10 Python
Python入门篇之函数
Oct 20 Python
Python制作Windows系统服务
Mar 25 Python
Python中存取文件的4种不同操作
Jul 02 Python
Flask Web开发入门之文件上传(八)
Aug 17 Python
pygame游戏之旅 如何制作游戏障碍
Nov 20 Python
python模块常用用法实例详解
Oct 17 Python
python如何实现不用装饰器实现登陆器小程序
Dec 14 Python
解决pycharm中opencv-python导入cv2后无法自动补全的问题(不用作任何文件上的修改)
Mar 05 Python
Python itertools.product方法代码实例
Mar 27 Python
如何利用python正则表达式匹配版本信息
Dec 09 Python
python编程简单几行代码实现视频转换Gif示例
Oct 05 Python
django 基于中间件实现限制ip频繁访问过程详解
Jul 30 #Python
python3安装crypto出错及解决方法
Jul 30 #Python
Django框架组成结构、基本概念与文件功能分析
Jul 30 #Python
Python实现性能自动化测试竟然如此简单
Jul 30 #Python
python爬虫 execjs安装配置及使用
Jul 30 #Python
python 实现识别图片上的数字
Jul 30 #Python
django框架模型层功能、组成与用法分析
Jul 30 #Python
You might like
关于PHP结束标签的使用细节探讨及联想
2013/03/04 PHP
解析CodeIgniter自定义配置文件
2013/06/18 PHP
PHP中JSON的应用技巧
2015/10/10 PHP
PHP中spl_autoload_register()函数用法实例详解
2016/07/18 PHP
使用composer 安装 laravel框架的方法图文详解
2019/08/02 PHP
Yii框架的布局文件实例分析
2019/09/04 PHP
thinkphp5框架实现数据库读取的数据转换成json格式示例
2019/10/10 PHP
贴一个在Mozilla中常用的Javascript代码
2007/01/09 Javascript
javascript 动态设置已知select的option的value值的代码
2009/12/16 Javascript
仿微博字符限制效果实现代码
2012/04/20 Javascript
悬浮广告方法日常收集整理
2016/03/18 Javascript
jquery实现跳到底部,回到顶部效果的简单实例(类似锚)
2016/07/10 Javascript
Bootstrap插件全集
2016/07/18 Javascript
移动端日期插件Mobiscroll.js使用详解
2016/12/19 Javascript
JS前端开发判断是否是手机端并跳转操作(小结)
2017/02/05 Javascript
Vue中使用Sortable的示例代码
2018/04/07 Javascript
nodejs require js文件入口,在package.json中指定默认入口main方法
2018/10/10 NodeJs
NodeJS模块与ES6模块系统语法及注意点详解
2019/01/04 NodeJs
JavaScript常见事件处理程序实例总结
2019/01/05 Javascript
vue-socket.io接收不到数据问题的解决方法
2020/05/13 Javascript
[49:13]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第一局
2016/02/27 DOTA
windows下Python实现将pdf文件转化为png格式图片的方法
2017/07/21 Python
老生常谈Python之装饰器、迭代器和生成器
2017/07/26 Python
python利用tkinter实现屏保
2019/07/30 Python
Python3.7黑帽编程之病毒篇(基础篇)
2020/02/04 Python
python使用Thread的setDaemon启动后台线程教程
2020/04/25 Python
为什么是 Python -m
2020/06/19 Python
Python根据字典的值查询出对应的键的方法
2020/09/30 Python
Python实现手势识别
2020/10/21 Python
html5移动端自适应布局的实现
2020/04/15 HTML / CSS
潘多拉意大利官方网上商城:网上选购PANDORA珠宝
2018/10/07 全球购物
乐高奥地利官方商店:LEGO Shop AT
2019/07/16 全球购物
FirstCry阿联酋儿童和婴儿产品网上购物:FirstCry.ae
2021/02/22 全球购物
禁烟标语大全
2014/06/11 职场文书
博士给导师的自荐信
2015/03/06 职场文书
订货会主持词
2015/07/01 职场文书