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 自动安装 Rising 杀毒软件
Apr 24 Python
Python入门篇之函数
Oct 20 Python
Python中使用scapy模拟数据包实现arp攻击、dns放大攻击例子
Oct 23 Python
Python中title()方法的使用简介
May 20 Python
python访问mysql数据库的实现方法(2则示例)
Jan 06 Python
你眼中的Python大牛 应该都有这份书单
Oct 31 Python
解决seaborn在pycharm中绘图不出图的问题
May 24 Python
numpy matrix和array的乘和加实例
Jun 28 Python
python排序函数sort()与sorted()的区别
Sep 18 Python
Scrapy框架介绍之Puppeteer渲染的使用
Jun 19 Python
keras 指定程序在某块卡上训练实例
Jun 22 Python
python--shutil移动文件到另一个路径的操作
Jul 13 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截取字符串之截取utf8或gbk编码的中英文字符串示例
2014/03/12 PHP
通过PHP简单实例介绍文件上传
2015/12/16 PHP
在Mac OS上编译安装Nginx+PHP+MariaDB开发环境的教程
2016/02/23 PHP
浅谈php中的循环while、do...while、for、foreach四种循环
2016/11/05 PHP
Alliance vs AM BO3 第二场2.13
2021/03/10 DOTA
学习jquery必备 api中英文对照的chm手册 下载
2007/05/03 Javascript
js 关于=+与+=日期函数使用说明(赋值运算符)
2011/11/15 Javascript
JavaScript中为什么null==0为false而null大于=0为true(个人研究)
2013/09/16 Javascript
动态加载iframe时get请求传递中文参数乱码解决方法
2014/05/07 Javascript
js获取url中&quot;?&quot;后面的字串方法
2014/05/15 Javascript
Javascript的表单与验证-非空验证
2016/03/18 Javascript
Bootstrap中的Panel和Table全面解析
2016/06/13 Javascript
Yarn的安装与使用详细介绍
2016/10/25 Javascript
JS扩展类,克隆对象与混合类实例分析
2016/11/26 Javascript
JS实现的检验身份证格式并输出出生日期,年龄,性别,出生地示例
2019/05/17 Javascript
JavaScript 预解析的4种实现方法解析
2019/09/03 Javascript
vue-iview动态新增和删除的方法
2020/06/17 Javascript
vue中用 async/await 来处理异步操作
2020/07/18 Javascript
Vue2.x和Vue3.x的双向绑定原理详解
2020/11/05 Javascript
JS画布动态实现黑客帝国背景效果
2020/11/08 Javascript
vue实现拖拽进度条
2021/03/01 Vue.js
[02:28]DOTA2亚洲邀请赛 LGD战队巡礼
2015/02/03 DOTA
Python中无限元素列表的实现方法
2014/08/18 Python
利用Python循环(包括while&amp;for)各种打印九九乘法表的实例
2017/11/06 Python
Python实现的爬虫刷回复功能示例
2018/06/07 Python
python print输出延时,让其立刻输出的方法
2019/01/07 Python
python网络编程之五子棋游戏
2020/05/14 Python
python中delattr删除对象方法的代码分析
2020/12/15 Python
法国体育用品商店:GO Sport
2019/10/23 全球购物
毕业自我评价范文
2013/11/17 职场文书
乔丹名人堂演讲稿
2014/05/24 职场文书
行政执法队伍作风整顿个人剖析材料
2014/10/11 职场文书
2014年学生会工作总结范文
2014/11/07 职场文书
应聘教师求职信范文
2015/03/20 职场文书
Django实现在线无水印抖音视频下载(附源码及地址)
2021/05/06 Python
pandas求平均数和中位数的方法实例
2021/08/04 Python