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的__builtin__模块中的一些要点知识
May 02 Python
在Django的模型中执行原始SQL查询的方法
Jul 21 Python
快速了解python leveldb
Jan 18 Python
Python实现PS图像调整之对比度调整功能示例
Jan 26 Python
在python里从协程返回一个值的示例
Feb 19 Python
Pyqt QImage 与 np array 转换方法
Jun 27 Python
Python中输入和输出(打印)数据实例方法
Oct 13 Python
解决pycharm启动后总是不停的updating indices...indexing的问题
Nov 27 Python
Pytorch保存模型用于测试和用于继续训练的区别详解
Jan 10 Python
通过python连接Linux命令行代码实例
Feb 18 Python
基于python实现可视化生成二维码工具
Jul 08 Python
Python可视化学习之seaborn绘制矩阵图详解
Feb 24 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
重量级动漫纷纷停播!唯独OVERLORD第四季正在英魂之刃继续更新
2020/05/06 日漫
php获取ip的三个属性区别介绍(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
2012/09/23 PHP
php中防止SQL注入的最佳解决方法
2013/04/25 PHP
PHP中使用hidef扩展代替define提高性能
2015/04/09 PHP
php异常处理方法实例汇总
2015/06/24 PHP
PHP设计模式之工厂方法设计模式实例分析
2018/04/25 PHP
比较详细的关于javascript中void(0)的具体含义解释
2007/08/02 Javascript
JavaScript中使用构造器创建对象无需new的情况说明
2012/03/01 Javascript
详解JavaScript中setSeconds()方法的使用
2015/06/11 Javascript
jQuery使用$.ajax提交表单完整实例
2015/12/11 Javascript
js 实现省市区三级联动菜单效果
2017/02/20 Javascript
浅谈webpack 自动刷新与解析
2018/04/09 Javascript
详解Vue源码学习之callHook钩子函数
2018/07/25 Javascript
Angular 利用路由跳转到指定页面的指定位置方法
2018/08/31 Javascript
JavaScript日期工具类DateUtils定义与用法示例
2018/09/03 Javascript
[原创]微信小程序获取网络类型的方法示例
2019/03/01 Javascript
Vue将props值实时传递 并可修改的操作
2020/08/09 Javascript
wxPython学习之主框架实例
2014/09/28 Python
零基础写python爬虫之抓取百度贴吧并存储到本地txt文件改进版
2014/11/06 Python
python爬虫框架talonspider简单介绍
2017/06/09 Python
Python程序退出方式小结
2017/12/09 Python
python 使用pandas计算累积求和的方法
2019/02/08 Python
python实现在cmd窗口显示彩色文字
2019/06/24 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
2020/04/27 Python
用Python开发app后端有优势吗
2020/06/29 Python
HTML5 visibilityState属性详细介绍和使用实例
2014/05/03 HTML / CSS
美国新兴城市生活方式零售商:VILLA
2017/12/06 全球购物
英国电子产品购物网站:Tech in the basket
2019/11/08 全球购物
求高于平均分的学生学号及成绩
2016/09/01 面试题
工作分析计划书
2014/04/30 职场文书
机票销售员态度不好检讨书
2014/09/27 职场文书
党的群众路线教育实践活动调研报告
2014/11/03 职场文书
2015年度党风廉政建设工作情况汇报
2015/01/02 职场文书
售后服务承诺函格式
2015/01/21 职场文书
JavaScript实现显示和隐藏图片
2021/04/29 Javascript
python3中apply函数和lambda函数的使用详解
2022/02/28 Python