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

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

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

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

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

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

  • 求樹深度
  • 按序輸出節(jié)點值(使用中序遍歷)
  • 查詢二叉搜索樹中一個具有給點關(guān)鍵字的結(jié)點,返回該節(jié)點的位置。時間復雜度是O(h),h是樹的高度。
  • 遞歸/迭代求最大關(guān)鍵字元素
  • 遞歸/迭代求最小關(guān)鍵字元素
# -*- coding:utf-8 -*-
'''
用Python實現(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é)點值(中序遍歷)
def input_in_order(root):
  if root is None:
    return
  input_in_order(root.left)
  print(root.val)
  input_in_order(root.right)



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


#迭代實現(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)鍵字元素
#迭代實現(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

#遞歸實現(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)鍵字元素
#遞歸實現(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)


#迭代實現(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é)點的地址,查找的次數(shù)取決于樹的高度。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

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

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

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

    python生成器推導式用法簡單示例

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

    Python?字典(Dictionary)詳細介紹

    這篇文章主要介紹了Python?字典(Dictionary)詳細,字典是另一種可變?nèi)萜髂P停铱纱鎯θ我忸愋蛯ο?。下面和小編一起進入文章學習新內(nèi)容吧,需要的朋友可以參考一下
    2022-02-02
  • Python定時器線程池原理詳解

    Python定時器線程池原理詳解

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

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

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

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

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

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

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

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

    下面小編就為大家?guī)硪黄率秩绾慰焖偃腴TPython(菜鳥必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Python實現(xiàn)微信小程序自動操作工具

    Python實現(xiàn)微信小程序自動操作工具

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

    支持python的分布式計算框架Ray詳解

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

最新評論