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读写Excel文件方法介绍
Nov 22 Python
Python简单计算文件夹大小的方法
Jul 14 Python
python中zip()方法应用实例分析
Apr 16 Python
Python 16进制与中文相互转换的实现方法
Jul 09 Python
python3.x 将byte转成字符串的方法
Jul 17 Python
Python通过调用有道翻译api实现翻译功能示例
Jul 19 Python
Python实现的简单计算器功能详解
Aug 25 Python
利用python求积分的实例
Jul 03 Python
python 魔法函数实例及解析
Sep 25 Python
简单了解为什么python函数后有多个括号
Dec 19 Python
简单的Python人脸识别系统
Jul 14 Python
Python爬虫分析微博热搜关键词的实现代码
Feb 22 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清除和销毁session的方法分析
2015/03/19 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
2016/03/18 PHP
thinkPHP中_initialize方法实例分析
2016/12/05 PHP
alixixi runcode.asp的代码不错的应用
2007/08/08 Javascript
Mootools 1.2教程 定时器和哈希简介
2009/09/15 Javascript
编写自己的jQuery插件简单实现代码
2011/04/19 Javascript
jquery序列化form表单使用ajax提交后处理返回的json数据
2014/03/03 Javascript
javascript的BOM
2016/05/03 Javascript
获取JS中网页各种高宽与位置的方法总结
2016/07/27 Javascript
使用JQuery选择HTML遍历函数的方法
2016/09/17 Javascript
快速解决js开发下拉框中blur与click冲突
2016/10/10 Javascript
JS代码实现百度地图 画圆 删除标注
2016/10/12 Javascript
JavaScript选取(picking)和反选(rejecting)对象的属性方法
2017/08/16 Javascript
vue如何截取字符串
2019/05/06 Javascript
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
2019/07/03 jQuery
element-ui table行点击获取行索引(index)并利用索引更换行顺序
2020/02/27 Javascript
Javascript实现秒表计时游戏
2020/05/27 Javascript
javascript实现扫雷简易版
2020/08/18 Javascript
python用于url解码和中文解析的小脚本(python url decoder)
2013/08/11 Python
Django 多环境配置详解
2019/05/14 Python
Python中的类与类型示例详解
2019/07/10 Python
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
2019/07/22 Python
wxPython修改文本框颜色过程解析
2020/02/14 Python
python IDLE添加行号显示教程
2020/04/25 Python
Python命令行参数argv和argparse该如何使用
2021/02/08 Python
德国低价购买灯具和家具网站:Style-home.de
2016/11/25 全球购物
TripAdvisor斯洛伐克:阅读评论、比较价格和酒店预订
2018/04/25 全球购物
初二政治教学反思
2014/01/12 职场文书
小组名称和口号
2014/06/09 职场文书
推广活动策划方案
2014/08/23 职场文书
大专生自我鉴定怎么写
2014/09/16 职场文书
向国旗敬礼活动总结
2014/09/27 职场文书
高校师德师风自我剖析材料
2014/09/29 职场文书
2014年街道办事处工作总结
2014/12/11 职场文书
查看nginx配置文件路径和资源文件路径的方法
2021/03/31 Servers
PHP控制循环操作的时间
2021/04/01 PHP