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实现2048小游戏
Mar 30 Python
Python制作爬虫抓取美女图
Jan 20 Python
Python实现字典依据value排序
Feb 24 Python
Python实现随机创建电话号码的方法示例
Dec 07 Python
python opencv 读取本地视频文件 修改ffmpeg的方法
Jan 26 Python
深入解析Python小白学习【操作列表】
Mar 23 Python
Django框架模型简单介绍与使用分析
Jul 18 Python
python3 pathlib库Path类方法总结
Dec 26 Python
Django Model中字段(field)的各种选项说明
May 19 Python
python代码如何注释
Jun 01 Python
python db类用法说明
Jul 07 Python
Python 中 sorted 如何自定义比较逻辑
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
php入门之连接mysql数据库的一个类
2012/04/21 PHP
浅谈PHP与C#的值类型指向区别的详解
2013/05/21 PHP
PHP cdata 处理(详细介绍)
2013/07/05 PHP
ThinkPHP自定义函数解决模板标签加减运算的方法
2015/07/03 PHP
PHP中Array相关函数简介
2016/07/03 PHP
实现复选框全选/全不选切换
2006/12/23 Javascript
用正则xmlHttp实现的偷(转)
2007/01/22 Javascript
正则表达式判断是否存在中文和全角字符和判断包含中文字符串长度
2008/09/27 Javascript
javascript中如何处理引号编码&amp;#034;
2013/08/15 Javascript
jQuery动画效果-slideUp slideDown上下滑动示例代码
2013/08/28 Javascript
JavaScript fontcolor方法入门实例(按照指定的颜色来显示字符串)
2014/10/17 Javascript
JS实现图片高亮展示效果实例
2015/11/24 Javascript
jQuery EasyUI提交表单验证
2016/07/19 Javascript
javascript中call,apply,bind函数用法示例
2016/12/19 Javascript
angular.js + require.js构建模块化单页面应用的方法步骤
2017/07/19 Javascript
利用Three.js如何实现阴影效果实例代码
2017/09/26 Javascript
jQuery实现常见的隐藏与展示列表效果示例
2018/06/04 jQuery
vue translate peoject实现在线翻译功能【新手必看】
2018/06/07 Javascript
vue 父组件给子组件传值子组件给父组件传值的实例代码
2019/04/15 Javascript
微信小程序框架的页面布局代码
2019/08/17 Javascript
javascript 易错知识点实例小结
2020/04/25 Javascript
[00:12]DAC2018 天才少年转战三号位,他的SOLO是否仍如昔日般强大?
2018/04/06 DOTA
Python完全新手教程
2007/02/08 Python
Python之inspect模块实现获取加载模块路径的方法
2018/10/16 Python
Python设计模式之组合模式原理与用法实例分析
2019/01/11 Python
使用 Django Highcharts 实现数据可视化过程解析
2019/07/31 Python
详解如何解决canvas图片getImageData,toDataURL跨域问题
2018/09/17 HTML / CSS
莫斯科隐形眼镜网上商店:Linzi
2019/07/22 全球购物
印刷工程专业应届生求职信
2013/09/29 职场文书
物业管理应届生求职信
2013/10/28 职场文书
社区优秀志愿者材料
2014/02/02 职场文书
2014镇党委书记党建工作汇报材料
2014/11/02 职场文书
2014年扫黄打非工作总结
2014/12/03 职场文书
师德标兵先进事迹材料
2014/12/19 职场文书
卫生院义诊活动总结
2015/05/07 职场文书
深入解析NumPy中的Broadcasting广播机制
2021/05/30 Python