python實現二叉搜尋樹

2021-09-19 12:42:17 字數 2325 閱讀 2043

二叉搜尋樹(binary search tree),又名二叉排序樹(binary sort tree)。

二叉搜尋樹是具有有以下性質的二叉樹:

(1)若左子樹不為空,則左子樹上所有節點的值均小於或等於它的根節點的值。

(2)若右子樹不為空,則右子樹上所有節點的值均大於或等於它的根節點的值。

(3)左、右子樹也分別為二叉搜尋樹。

2.1 插入

從根節點開始,若插入的值比根節點的值小,則將其插入根節點的左子樹;若比根節點的值大,則將其插入根節點的右子樹,直至找到空結點,插入即可。

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