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 相关文章推荐
pyenv命令管理多个Python版本
Mar 26 Python
浅谈python中字典append 到list 后值的改变问题
May 04 Python
Linux下Python安装完成后使用pip命令的详细教程
Nov 22 Python
python实现串口自动触发工作的示例
Jul 02 Python
详解python播放音频的三种方法
Sep 23 Python
python输出第n个默尼森数的实现示例
Mar 08 Python
Python3将ipa包中的文件按大小排序
Apr 17 Python
Python devel安装失败问题解决方案
Jun 09 Python
tensorflow 大于某个值为1,小于为0的实例
Jun 30 Python
浅谈Python基础之列表那些事儿
May 11 Python
pytorch 预训练模型读取修改相关参数的填坑问题
Jun 05 Python
Python 游戏大作炫酷机甲闯关游戏爆肝数千行代码实现案例进阶
Oct 16 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
DC这些乐高系列动画电影你看过几部?
2020/04/09 欧美动漫
使用PHP Socket写的POP3类
2013/10/30 PHP
Laravel中使用阿里云OSS Composer包分享
2015/02/10 PHP
php保存任意网络图片到服务器的方法
2015/04/14 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
新手入门常用代码集锦
2007/01/11 Javascript
jQuery 使用手册(七)
2009/09/23 Javascript
javascript获取xml节点的最大值(实现代码)
2013/12/11 Javascript
jquery选择器大全 全面详解jquery选择器
2014/03/06 Javascript
用JavaScript实现页面重定向功能的教程
2015/06/04 Javascript
JQuery插入DOM节点的方法
2015/06/11 Javascript
javascript学习总结之js使用技巧
2015/09/02 Javascript
jQuery实现仿美橙互联两级导航菜单效果完整实例
2015/09/17 Javascript
bootstrap基本配置_动力节点Java学院整理
2017/07/14 Javascript
微信小程序 POST请求的实例详解
2017/09/29 Javascript
AngularJS使用ng-repeat遍历二维数组元素的方法详解
2017/11/11 Javascript
在一个页面实现两个zTree联动的方法
2017/12/20 Javascript
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
2019/04/17 Javascript
微信小程序下拉菜单效果的实例代码
2019/05/14 Javascript
js实现贪吃蛇小游戏
2019/10/29 Javascript
jQuery实现弹出层效果
2019/12/10 jQuery
vue中后端做Excel导出功能返回数据流前端的处理操作
2020/09/08 Javascript
[14:03]2017DOTA2亚洲邀请赛开幕式:12神兵演绎水墨中华
2017/04/01 DOTA
python爬虫教程之爬取百度贴吧并下载的示例
2014/03/07 Python
Python实现统计英文单词个数及字符串分割代码
2015/05/28 Python
Python解析命令行读取参数--argparse模块使用方法
2018/01/23 Python
python中的随机函数random的用法示例
2018/01/27 Python
Python Django的安装配置教程图文详解
2019/07/17 Python
基于 Django 的手机管理系统实现过程详解
2019/08/16 Python
Python for循环与getitem的关系详解
2020/01/02 Python
台湾饭店和机票预订网站:Expedia台湾
2016/08/05 全球购物
英国卫浴商店:Ergonomic Design
2019/09/22 全球购物
美国办公用品折扣网站:Shoplet.com
2019/11/24 全球购物
大学生优秀团员事迹材料
2014/01/30 职场文书
机关工会开展学习雷锋活动总结
2014/03/01 职场文书
房屋质量投诉书
2015/07/02 职场文书