二叉搜尋樹(binary search tree),又名二叉排序樹(binary sort tree)。
二叉搜尋樹是具有有以下性質的二叉樹:
(1)若左子樹不為空,則左子樹上所有節點的值均小於或等於它的根節點的值。2.1 插入(2)若右子樹不為空,則右子樹上所有節點的值均大於或等於它的根節點的值。
(3)左、右子樹也分別為二叉搜尋樹。
從根節點開始,若插入的值比根節點的值小,則將其插入根節點的左子樹;若比根節點的值大,則將其插入根節點的右子樹,直至找到空結點,插入即可。
elif num2.2 查詢
從根節點開始查詢,待查詢的值是否與根節點的值相同,
若相同則返回true(或者返回找到的結點);**否則,判斷待尋找的值是否比根節點的值小,
若是則進入根節點左子樹進行查詢,
否則進入右子樹進行查詢
def search(self,root,num):
while root:
if num>root.val:
root=root.right
elif num2.3 查詢最大值,最小樹
查詢最小值:從根節點開始,沿著左子樹一直往下,直到找到最後乙個左子樹節點,就是最小值
def find_min(self,root):
while root.left:
root=root.left
return root
查詢最大值:從根節點開始,沿著右子樹一直往下,直到找到最後乙個右子樹節點,就是最大值
def find_max(self,root):
while root.right:
root=root.right
return root.val
2.4 刪除結點
刪除操作分為三種情況:
(1)待刪除節點既無左子樹也無右子樹:
直接刪除該節點即可
(2) 待刪除節點只有左子樹或者只有右子樹:
將其左子樹或右子樹根節點代替待刪除節點
(3)待刪除節點既有左子樹也有右子樹:
找到該節點右子樹中最小值節點,使用該節點代替待刪除節點,然後在右子樹中刪除最小值節點。
# num==root.val 時,說明root是待刪結點
else:
#既有左子樹又有右子樹
if root.left and root.right:
node_right_min=self.find_min(root.right)
root.val=node_right_min.val
root.right=self.delete(root.right,node_right_min.val)
# 只有左子樹
elif root.left and not root.right:
root=root.left
# 只有右子樹
elif not root.left and root.right:
root=root.right
#既有左子樹又有右子樹
else:
root=none
return root
Python實現二叉搜尋樹BST
二叉排序樹 binary sort tree 又稱二叉查詢樹。它或者是一棵空樹 或者是具有下列性質的二叉樹 1.若左子樹不空,則左子樹上所有結點的值均小於根結點的值 2.若右子樹不空,則右子樹上所有結點的值均大於根節點的值 3.左 右子樹也分別為二叉排序樹。coding utf 8 用python實...
二叉搜尋樹的python實現
二叉搜尋樹,特點是左節點的值小於根節點的值,右節點的值大於根節點的值,並且左右子樹也遵循這個規律.class binarysearchtree object def init self,key self.key key self.left none self.right none deffind s...
二叉搜尋樹 二叉搜尋樹
題目 二叉搜尋樹 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...