二叉搜尋樹的python實現

2021-09-16 12:09:47 字數 2601 閱讀 3601

二叉搜尋樹,特點是左節點的值小於根節點的值,右節點的值大於根節點的值,並且左右子樹也遵循這個規律.

class

binarysearchtree

(object):

def__init__

(self, key)

: self.key = key

self.left =

none

self.right =

none

deffind

(self, x)

:if x == self.key:

return

true

elif x < self.key and self.left:

# 如果x小,則去左子樹找

return self.left.find(x)

elif x > self.key and self.right:

# 如果x大,則去右子樹找

return self.right.find(x)

else

:return

none

# 找不到返回none

deffindmin

(self)

:if self.left:

# 如果左節點存在,最小值一定在左節點的最深處

return self.left.findmin(

)else

:return self.key # 如果左節點沒有,那麼根節點最小

deffindmax

(self)

:if self.right:

# 如果右節點存在,最大值一定在右節點的最深處

return self.right.findmax(

)else

:return self.key # 如果右節點沒有,那麼根節點最大

definsert

(self, x)

:if self.find(x)

:# 如果找到了該節點,則什麼也不做

return

none

else

:# 如果沒有找到則開始插入

if x < self.key:

# 如果插入值小,則插入左子樹

if self.left:

# 先判斷左子樹是否存在

return self.left.insert(x)

else

: newtree = binarysearchtree(x)

self.left = newtree # 如果左子樹不存在,則把該節點設為左子樹

elif x > self.key:

# 如果插入值大,則插入右子樹

if self.right:

return self.right.insert(x)

else

: newtree = binarysearchtree(x)

self.right = newtree

defdelete

(self, x)

:if self.find(x)

:# 首先判斷該節點是否存在

if x < self.key:

# 如果要刪的資料比該資料self.key小,從左子樹刪起

self.left = self.left.delete(x)

return self

elif x > self.key:

# 如果要刪的資料比self.key大,從右子樹刪起

self.right = self.right.delete(x)

return self

else

:# 如果就是該資料,判斷他是否有左右子樹

if self.left and self.right:

# 如果左右子樹都存在

minkey = self.right.findmin(

).key # 把右子樹中最小的點連線原來x的父節點, 並且右子樹中刪除該點

self.key = minkey

self.right = self.right.delete(minkey)

return self

else

:# 如果左右節點不全存在

if self.left:

return self.left

else

:return self.right

else

:return self

bst = binarysearchtree(17)

node_list =[17

,5,29

,38,35

,2,9

,8,16

,11]for l in node_list:

bst.insert(l)

print

(bst.findmax())

print

(bst.findmin())

print

(bst.find(10)

)print

(bst.delete(11)

)

python實現二叉搜尋樹

二叉搜尋樹 binary search tree 又名二叉排序樹 binary sort tree 二叉搜尋樹是具有有以下性質的二叉樹 1 若左子樹不為空,則左子樹上所有節點的值均小於或等於它的根節點的值。2 若右子樹不為空,則右子樹上所有節點的值均大於或等於它的根節點的值。3 左 右子樹也分別為二...

Python實現二叉搜尋樹BST

二叉排序樹 binary sort tree 又稱二叉查詢樹。它或者是一棵空樹 或者是具有下列性質的二叉樹 1.若左子樹不空,則左子樹上所有結點的值均小於根結點的值 2.若右子樹不空,則右子樹上所有結點的值均大於根節點的值 3.左 右子樹也分別為二叉排序樹。coding utf 8 用python實...

二叉搜尋樹 二叉搜尋樹

題目 二叉搜尋樹 time limit 2000 1000 ms j a others memory limit 32768 32768 k j a others total submission s 6945 accepted submission s 3077 problem descripti...