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中的变量、引用、拷贝和作用域的问题
Apr 07 Python
六个窍门助你提高Python运行效率
Jun 09 Python
Django与遗留的数据库整合的方法指南
Jul 24 Python
各个系统下的Python解释器相关安装方法
Oct 12 Python
python dict 字典 以及 赋值 引用的一些实例(详解)
Jan 20 Python
Python温度转换实例分析
Jan 17 Python
Python利用pandas计算多个CSV文件数据值的实例
Apr 19 Python
python excel使用xlutils类库实现追加写功能的方法
May 02 Python
Python 实现try重新执行
Dec 21 Python
浅谈Python中range与Numpy中arange的比较
Mar 11 Python
python利用proxybroker构建爬虫免费IP代理池的实现
Feb 21 Python
python上下文管理的使用场景实例讲解
Mar 03 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一些公用函数的集合
2008/03/27 PHP
php 分页类 扩展代码
2009/06/11 PHP
总结PHP删除字符串最后一个字符的三种方法
2016/08/30 PHP
php微信公众号开发之翻页查询
2018/10/20 PHP
Extjs学习过程中新手容易碰到的低级错误积累
2010/02/11 Javascript
jQuery动态显示和隐藏datagrid中的某一列的方法
2013/12/11 Javascript
一个JavaScript用逗号分割字符串实例
2014/09/22 Javascript
jQuery无刷新上传之uploadify3.1简单使用
2016/06/18 Javascript
Bootstrap实现带暂停功能的轮播组件(推荐)
2016/11/25 Javascript
EsLint入门学习教程
2017/02/17 Javascript
Bootstrap 3 进度条的实现
2017/02/22 Javascript
BootStrap Table实现server分页序号连续显示功能(当前页从上一页的结束序号开始)
2017/09/12 Javascript
Parcel.js + Vue 2.x 极速零配置打包体验教程
2017/12/24 Javascript
jQuery+datatables插件实现ajax加载数据与增删改查功能示例
2018/04/17 jQuery
微信小程序实现滚动Tab选项卡
2020/11/16 Javascript
NodeJS配置CORS实现过程详解
2020/12/02 NodeJs
Javascript新手入门之字符串拼接与变量的应用
2020/12/03 Javascript
python实现指定字符串补全空格的方法
2015/04/30 Python
Python的Django框架可适配的各种数据库介绍
2015/07/15 Python
Sanic框架Cookies操作示例
2018/07/17 Python
pytorch自定义初始化权重的方法
2019/08/17 Python
python-tornado的接口用swagger进行包装的实例
2019/08/29 Python
VSCode中自动为Python文件添加头部注释
2019/11/14 Python
TensorFlow2.0矩阵与向量的加减乘实例
2020/02/07 Python
pytorch实现Tensor变量之间的转换
2020/02/17 Python
canvas实现烟花的示例代码
2020/01/16 HTML / CSS
日本非常有名的内衣丝袜品牌:GUNZE
2017/01/06 全球购物
德国知名健康零食网上商店:Seeberger
2017/07/27 全球购物
写给女朋友的道歉信
2014/01/08 职场文书
小学生演讲稿大全
2014/04/25 职场文书
创先争优演讲稿
2014/09/15 职场文书
暑期社会实践证明书
2014/11/17 职场文书
小学老师对学生的评语
2014/12/29 职场文书
2015年个人工作总结报告
2015/04/25 职场文书
如何书写公司员工保密协议?
2019/06/27 职场文书
golang switch语句的灵活写法介绍
2021/05/06 Golang