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实现绘制树枝简单示例
Jul 24 Python
在Python中使用dict和set方法的教程
Apr 27 Python
浅谈终端直接执行py文件,不需要python命令
Jan 23 Python
python实现图片彩色转化为素描
Jan 15 Python
Django JWT Token RestfulAPI用户认证详解
Jan 23 Python
pyinstaller打包多个py文件和去除cmd黑框的方法
Jun 21 Python
详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)
Aug 02 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
Feb 23 Python
Python使用Matlab命令过程解析
Jun 04 Python
python能否java成为主流语言吗
Jun 22 Python
使用Python获取爱奇艺电视剧弹幕数据的示例代码
Jan 12 Python
Python语言规范之Pylint的详细用法
Jun 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
php文件操作实例代码
2012/05/10 PHP
PHP借助phpmailer发送邮件
2015/05/11 PHP
PHP目录与文件操作技巧总结(创建,删除,遍历,读写,修改等)
2016/09/11 PHP
php实现用户登陆简单实例
2017/04/04 PHP
PHP实现图片的等比缩放和Logo水印功能示例
2017/05/04 PHP
JQuery 自定义CircleAnimation,Animate方法学习笔记
2011/07/10 Javascript
JQuery遍历json数组的3种方法
2014/11/08 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
JavaScript对Json的增删改属性详解
2016/06/02 Javascript
JQuery动态添加Select的Option元素实现方法
2016/08/29 Javascript
vue 点击按钮增加一行的方法
2018/09/07 Javascript
vue.js实现的幻灯片功能示例
2019/01/18 Javascript
JavaScript数据结构与算法之二叉树添加/删除节点操作示例
2019/03/01 Javascript
关于NodeJS中的循环引用详解
2019/07/23 NodeJs
微信小程序实现比较功能的方法汇总(五种方法)
2020/03/07 Javascript
手把手教你实现 Promise的使用方法
2020/09/02 Javascript
vue实现div可拖动位置也可改变盒子大小的原理
2020/09/16 Javascript
jquery插件懒加载的示例
2020/10/24 jQuery
Python 分析Nginx访问日志并保存到MySQL数据库实例
2014/03/13 Python
python的绘图工具matplotlib使用实例
2014/07/03 Python
python遍历 truple list dictionary的几种方法总结
2016/09/11 Python
Python使用try except处理程序异常的三种常用方法分析
2018/09/05 Python
解决pyecharts在jupyter notebook中使用报错问题
2020/04/23 Python
Python编写带选项的命令行程序方法
2019/08/13 Python
Django bulk_create()、update()与数据库事务的效率对比分析
2020/05/15 Python
python属于跨平台语言码
2020/06/09 Python
英国家喻户晓的折扣商场:TK Maxx
2017/05/26 全球购物
行政工作个人的自我评价
2014/02/13 职场文书
《赵州桥》教学反思
2014/02/17 职场文书
优秀少先队工作者事迹材料
2014/05/13 职场文书
土地转让协议书
2014/09/27 职场文书
施工员岗位职责范本
2015/04/11 职场文书
nginx反向代理时如何保持长连接
2021/03/31 Servers
详解Js模块化的作用原理和方案
2021/04/29 Javascript
java中用float时,数字后面加f,这样是为什么你知道吗
2021/09/04 Java/Android
golang定时器
2022/04/14 Golang