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 WindowsError的错误代码详解
Jul 23 Python
Python反射的用法实例分析
Feb 11 Python
Python使用pyshp库读取shapefile信息的方法
Dec 29 Python
Python 串口读写的实现方法
Jun 12 Python
python可视化爬虫界面之天气查询
Jul 03 Python
python实现连连看辅助(图像识别)
Mar 25 Python
pytorch 固定部分参数训练的方法
Aug 17 Python
下载官网python并安装的步骤详解
Oct 12 Python
通过 Django Pagination 实现简单分页功能
Nov 11 Python
python飞机大战pygame游戏背景设计详解
Dec 17 Python
基于Python3读写INI配置文件过程解析
Jul 23 Python
Python实现钉钉/企业微信自动打卡的示例代码
Feb 02 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 遍历数据表数据并列表横向排列的代码
2009/09/05 PHP
ThinkPHP实现动态包含文件的方法
2014/11/29 PHP
php通过文件流方式复制文件的方法
2015/03/13 PHP
JavaScript浏览器选项卡效果
2010/08/25 Javascript
原生Js与jquery的多组处理, 仅展开一个区块的折叠效果
2011/01/09 Javascript
js常用代码段收集
2011/10/28 Javascript
Jquery和JS用外部变量获取Ajax返回的参数值的方法实例(超简单)
2013/06/17 Javascript
javascript版的in_array函数(判断数组中是否存在特定值)
2014/05/09 Javascript
js,jquery滚动/跳转页面到指定位置的实现思路
2014/06/03 Javascript
javascript实现表格排序 编辑 拖拽 缩放
2015/01/02 Javascript
DOM节点深度克隆函数cloneNode()用法实例
2015/01/12 Javascript
浏览器检测JS代码(兼容目前各大主流浏览器)
2016/02/21 Javascript
javascript self对象使用详解
2016/10/18 Javascript
JS解析后台返回的JSON格式数据实例
2018/08/06 Javascript
Angular封装搜索框组件操作示例
2019/04/25 Javascript
小程序根据手机机型设置自定义底部导航距离
2019/06/04 Javascript
vuex vue简单使用知识点总结
2019/08/29 Javascript
javscript 数组扁平化的实现
2020/02/03 Javascript
js实现带有动画的返回顶部
2020/08/09 Javascript
粗略分析Python中的内存泄漏
2015/04/23 Python
浅谈django rest jwt vue 跨域问题
2018/10/26 Python
OpenCV+Python识别车牌和字符分割的实现
2019/01/31 Python
Python实现查找字符串数组最长公共前缀示例
2019/03/27 Python
Django组件cookie与session的具体使用
2019/06/05 Python
Python中利用LSTM模型进行时间序列预测分析的实现
2019/07/26 Python
Spartoo芬兰:欧洲最大的网上鞋店
2016/08/28 全球购物
DC Shoes荷兰官方网站:美国极限运动品牌
2019/10/22 全球购物
如果Session Bean得Remove方法一直都不被调用会怎么样
2012/07/14 面试题
大专学生推荐信范文
2013/11/19 职场文书
上班早退检讨书
2014/01/09 职场文书
离婚协议书范本(2014版)
2014/09/28 职场文书
创新创业项目计划书该怎样写?
2019/08/13 职场文书
详解python的内存分配机制
2021/05/10 Python
maven依赖的version声明控制方式
2022/01/18 Java/Android
一文弄懂MySQL中redo log与binlog的区别
2022/02/15 MySQL