二叉搜尋樹,特點是左節點的值小於根節點的值,右節點的值大於根節點的值,並且左右子樹也遵循這個規律.
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...