欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實(shí)現(xiàn)二叉搜索樹BST的方法示例

 更新時(shí)間:2019年07月30日 11:21:27   作者:神不煩  
這篇文章主要介紹了Python實(shí)現(xiàn)二叉搜索樹BST的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

二叉排序樹(BST)又稱二叉查找樹、二叉搜索樹

二叉排序樹(Binary Sort Tree)又稱二叉查找樹。它或者是一棵空樹;或者是具有下列性質(zhì)的二叉樹:

1.若左子樹不空,則左子樹上所有結(jié)點(diǎn)的值均小于根結(jié)點(diǎn)的值;
2.若右子樹不空,則右子樹上所有結(jié)點(diǎn)的值均大于根節(jié)點(diǎn)的值;
3.左、右子樹也分別為二叉排序樹。

  • 求樹深度
  • 按序輸出節(jié)點(diǎn)值(使用中序遍歷)
  • 查詢二叉搜索樹中一個(gè)具有給點(diǎn)關(guān)鍵字的結(jié)點(diǎn),返回該節(jié)點(diǎn)的位置。時(shí)間復(fù)雜度是O(h),h是樹的高度。
  • 遞歸/迭代求最大關(guān)鍵字元素
  • 遞歸/迭代求最小關(guān)鍵字元素
# -*- coding:utf-8 -*-
'''
用Python實(shí)現(xiàn)二叉搜索樹。
'''


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))


#按序輸出結(jié)點(diǎn)值(中序遍歷)
def input_in_order(root):
  if root is None:
    return
  input_in_order(root.left)
  print(root.val)
  input_in_order(root.right)



#(遞歸實(shí)現(xiàn) 、迭代實(shí)現(xiàn))查詢二叉搜索樹中一個(gè)具有給點(diǎn)關(guān)鍵字的結(jié)點(diǎn),返回該節(jié)點(diǎn)的位置。時(shí)間復(fù)雜度是O(h),h是樹的高度。
#遞歸實(shí)現(xiàn)
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)


#迭代實(shí)現(xiàn)
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


#求最大關(guān)鍵字元素
#迭代實(shí)現(xiàn)
def max_value1(root):
  while root != None and root.left != None:
    root = root.right
  if root is None:
    return root
  else:
    return root.val

#遞歸實(shí)現(xiàn)
def max_value2(root):
  if root == None:
    return root
  elif root.right == None:
    return root.val
  else:
    return max_value2(root.right)


#求最小關(guān)鍵字元素
#遞歸實(shí)現(xiàn)
def min_value1(root):
  if root is None:
    return root
  elif root.left is None:
    return root.val
  else:
    return min_value1(root.left)


#迭代實(shí)現(xiàn)
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,返回其所在結(jié)點(diǎn)的地址,查找的次數(shù)取決于樹的高度。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python實(shí)現(xiàn)AES加密和解密

    python實(shí)現(xiàn)AES加密和解密

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)AES加密和解密,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • python生成器推導(dǎo)式用法簡(jiǎn)單示例

    python生成器推導(dǎo)式用法簡(jiǎn)單示例

    這篇文章主要介紹了python生成器推導(dǎo)式用法,結(jié)合簡(jiǎn)單實(shí)例形式分析了Python生成器推導(dǎo)式的原理、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-10-10
  • Python?字典(Dictionary)詳細(xì)介紹

    Python?字典(Dictionary)詳細(xì)介紹

    這篇文章主要介紹了Python?字典(Dictionary)詳細(xì),字典是另一種可變?nèi)萜髂P?,且可存?chǔ)任意類型對(duì)象。下面和小編一起進(jìn)入文章學(xué)習(xí)新內(nèi)容吧,需要的朋友可以參考一下
    2022-02-02
  • Python定時(shí)器線程池原理詳解

    Python定時(shí)器線程池原理詳解

    這篇文章主要介紹了Python定時(shí)器線程池原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Numpy?數(shù)組索引的實(shí)現(xiàn)

    Numpy?數(shù)組索引的實(shí)現(xiàn)

    本文主要介紹了Numpy?數(shù)組索引的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 使用Python實(shí)現(xiàn)橋接模式的代碼詳解

    使用Python實(shí)現(xiàn)橋接模式的代碼詳解

    橋接模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,它將抽象部分與其實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化,本文將給大家介紹如何使用Python實(shí)現(xiàn)橋接模式,需要的朋友可以參考下
    2024-02-02
  • 50行Python代碼實(shí)現(xiàn)人臉檢測(cè)功能

    50行Python代碼實(shí)現(xiàn)人臉檢測(cè)功能

    現(xiàn)在的人臉識(shí)別技術(shù)已經(jīng)得到了非常廣泛的應(yīng)用,支付領(lǐng)域、身份驗(yàn)證、美顏相機(jī)里都有它的應(yīng)用。下面小編給大家?guī)?lái)了基于50行Python代碼實(shí)現(xiàn)人臉檢測(cè)功能,一起看看吧
    2018-01-01
  • 新手如何快速入門Python(菜鳥必看篇)

    新手如何快速入門Python(菜鳥必看篇)

    下面小編就為大家?guī)?lái)一篇新手如何快速入門Python(菜鳥必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • Python實(shí)現(xiàn)微信小程序自動(dòng)操作工具

    Python實(shí)現(xiàn)微信小程序自動(dòng)操作工具

    這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)微信小程序自動(dòng)化操作的小工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-01-01
  • 支持python的分布式計(jì)算框架Ray詳解

    支持python的分布式計(jì)算框架Ray詳解

    Ray是一種分布式執(zhí)行框架,便于大規(guī)模應(yīng)用程序和利用先進(jìn)的機(jī)器學(xué)習(xí)庫(kù),今天給大家分享支持python的分布式計(jì)算框架Ray詳解,感興趣的朋友一起看看吧
    2021-07-07

最新評(píng)論