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通过zlib实现压缩与解压字符串的方法
Nov 19 Python
Python标准库os.path包、glob包使用实例
Nov 25 Python
python实现中文分词FMM算法实例
Jul 10 Python
Python编码类型转换方法详解
Jul 01 Python
Python实现ssh批量登录并执行命令
Oct 25 Python
使用Python的Scrapy框架十分钟爬取美女图
Dec 26 Python
Python基于socket实现简单的即时通讯功能示例
Jan 16 Python
python中while和for的区别总结
Jun 28 Python
python实现动态数组的示例代码
Jul 15 Python
利用python画出AUC曲线的实例
Feb 28 Python
浅谈OpenCV中的新函数connectedComponentsWithStats用法
Jul 05 Python
Python Numpy之linspace用法说明
Apr 17 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
桌面中心(四)数据显示
2006/10/09 PHP
php+ajax无刷新上传图片的实现方法
2016/12/06 PHP
Thinkphp5框架ajax接口实现方法分析
2019/08/28 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
js截取字符串的两种方法及区别详解
2013/11/05 Javascript
jQuery实现鼠标滚轮动态改变样式或效果
2015/01/05 Javascript
纯javascript判断查询日期是否为有效日期
2015/08/24 Javascript
js实现图片无缝滚动
2015/12/23 Javascript
AngularJS中的$watch(),$digest()和$apply()区分
2016/04/04 Javascript
Google Maps基础及实例解析
2016/08/06 Javascript
vue中如何实现变量和字符串拼接
2017/06/19 Javascript
前端常见跨域解决方案(全)
2017/09/19 Javascript
jq.ajax+php+mysql实现关键字模糊查询(示例讲解)
2018/01/02 Javascript
详解Vue.js中.native修饰符
2018/04/24 Javascript
vue打包使用Nginx代理解决跨域问题
2018/08/27 Javascript
JavaScript两种计时器的实例讲解
2019/01/31 Javascript
Vue项目history模式下微信分享爬坑总结
2019/03/29 Javascript
Vue.extend实现挂载到实例上的方法
2019/05/01 Javascript
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
2019/07/03 jQuery
jQuery+PHP+Ajax实现动态数字统计展示功能
2019/12/25 jQuery
[01:02:30]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
Python获取linux主机ip的简单实现方法
2016/04/18 Python
pycharm debug功能实现跳到循环末尾的方法
2018/11/29 Python
关于Tensorflow分布式并行策略
2020/02/03 Python
基于python实现简单网页服务器代码实例
2020/09/14 Python
Django项目在pycharm新建的步骤方法
2021/03/02 Python
数字漫画:comiXology
2020/06/13 全球购物
远东集团网络工程师面试题
2014/10/20 面试题
基层党员对照检查材料
2014/08/25 职场文书
最美护士演讲稿
2014/08/27 职场文书
2014年个人总结范文
2015/03/09 职场文书
营销策划分析:怎么策划才能更好销量产品?
2019/09/04 职场文书
2019幼儿园感恩节活动策划书
2019/11/28 职场文书
教你用eclipse连接mysql数据库
2021/04/22 MySQL
Python基于Tkinter开发一个爬取B站直播弹幕的工具
2021/05/06 Python
Python基本数据类型之字符串str
2021/07/21 Python