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 相关文章推荐
itchat和matplotlib的结合使用爬取微信信息的实例
Aug 25 Python
python编写Logistic逻辑回归
Dec 30 Python
Python爬取个人微信朋友信息操作示例
Aug 03 Python
使用Python实现租车计费系统的两种方法
Sep 29 Python
Python 中Django安装和使用教程详解
Jul 03 Python
python3.6 tkinter实现屏保小程序
Jul 30 Python
详解Django-channels 实现WebSocket实例
Aug 22 Python
pytorch标签转onehot形式实例
Jan 02 Python
基于torch.where和布尔索引的速度比较
Jan 02 Python
TensorFlow的reshape操作 tf.reshape的实现
Apr 19 Python
10个示例带你掌握python中的元组
Nov 23 Python
python实现scrapy爬虫每天定时抓取数据的示例代码
Jan 27 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
set_include_path和get_include_path使用及注意事项
2013/02/02 PHP
php生成随机数/生成随机字符串的方法小结【5种方法】
2020/05/27 PHP
jQuery MD5加密实现代码
2010/03/15 Javascript
纯JavaScript实现的完美渐变弹出层效果代码
2010/04/02 Javascript
Javascript Throttle &amp; Debounce应用介绍
2013/03/19 Javascript
javascript中自定义对象的属性方法分享
2013/07/12 Javascript
jQuery中odd选择器的定义和用法
2014/12/23 Javascript
javascript结合fileReader 实现上传图片
2015/01/30 Javascript
javascript动态创建链接的方法
2015/05/13 Javascript
javascript实现的简单的表单验证
2015/07/10 Javascript
JavaScript数据结构与算法之队列原理与用法实例详解
2017/11/22 Javascript
layui加载数据显示loading加载完成loading消失的实例代码
2019/09/23 Javascript
vue实现移动端图片上传功能
2019/12/23 Javascript
js实现日历
2020/11/07 Javascript
python遍历一个目录,输出所有的文件名的实例
2018/04/23 Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
2018/07/25 Python
idea创建springMVC框架和配置小文件的教程图解
2018/09/18 Python
python+mysql实现学生信息查询系统
2019/02/21 Python
Python3中urlencode和urldecode的用法详解
2019/07/23 Python
django 框架实现的用户注册、登录、退出功能示例
2019/11/28 Python
python-numpy-指数分布实例详解
2019/12/07 Python
Omio美国:全欧洲低价大巴、火车和航班搜索和比价
2017/11/08 全球购物
大学生四年生活自我鉴定
2013/11/21 职场文书
试用期转正鉴定评语
2014/01/27 职场文书
《孙权劝学》教学反思
2014/04/23 职场文书
学校三节实施方案
2014/06/09 职场文书
青年教师个人总结
2015/02/11 职场文书
清明节网上祭英烈寄语2015
2015/03/04 职场文书
中标通知书格式
2015/04/17 职场文书
基层组织建设年活动总结
2015/05/09 职场文书
2016年植树节红领巾广播稿
2015/12/17 职场文书
详解Python 3.10 中的新功能和变化
2021/04/28 Python
Django 实现jwt认证的示例
2021/04/30 Python
PHP使用QR Code生成二维码实例
2021/07/07 PHP
python自动化测试通过日志3分钟定位bug
2021/11/20 Python
MySQL表字段数量限制及行大小限制详情
2022/07/23 MySQL