Python 二叉查詢樹

2021-09-10 04:01:33 字數 2618 閱讀 8331

二叉搜尋樹(binary search tree),又名二叉排序樹(binary sort tree)。二叉搜尋樹是具有有以下性質的二叉樹:

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

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

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

二叉查詢樹的最左邊的結點即為最小值,要查詢最小值,僅僅需遍歷左子樹的結點直到為空為止。同理,最右邊的結點結尾最大值,要查詢最大值,僅僅需遍歷右子樹的結點直到為空為止。二叉查詢樹的插入查詢和刪除都是通過遞迴的方式來實現的,刪除乙個結點的時候,先找到這個結點s,假設這個結點左右孩子都不為空,這時並非真正的刪除這個結點s,而是在其右子樹找到後繼結點,將後繼結點的值付給s,然後刪除這個後繼結點就可以。

class treenode:

def __init__(self,val):

self.val=val

self.left=none

self.right=none

從根節點開始,若插入的值比根節點的值小,則將其插入根節點的左子樹;若比根節點的值大,則將其插入根節點的右子樹。該操作可使用遞迴進行實現。 

從根節點開始查詢,待查詢的值是否與根節點的值相同,若相同則返回true;否則,判斷待尋找的值是否比根節點的值小,若是則進入根節點左子樹進行查詢,否則進入右子樹進行查詢。該操作使用遞迴實現。

def query(root,val):

if not root:

return false

if root.val==val:

return true

else:

if valroot.val:

return query(root.right,val)

(1)查詢最小值:從根節點開始,沿著左子樹一直往下,直到找到最後乙個左子樹節點,按照定義可知,該節點一定是該二叉搜尋樹中的最小值節點。

def findmin(root):

if not root:

return none

elif root.left:

return findmin(root.left)

else:

return root

(2)查詢最大值:從根節點開始,沿著右子樹一直往下,直到找到最後乙個右子樹節點,按照定義可知,該節點一定是該二叉搜尋樹中的最大值節點。

def findmax(root):

if not root:

return none

elif root.right:

return findmin(root.right)

else:

return root

對二叉搜尋樹節點的刪除操作分為以下三種情況:

(1)待刪除節點既無左子樹也無右子樹:直接刪除該節點即可

(2)待刪除節點只有左子樹或者只有右子樹:將其左子樹或右子樹根節點代替待刪除節點

(3)待刪除節點既有左子樹也有右子樹:找到該節點右子樹中最小值節點,使用該節點代替待刪除節點,然後在右子樹中刪除最小值節點。

return root #返回需要刪除的節點位置上目前的節點

python 二叉樹查詢 Python二叉樹搜尋

stack depth is initialised to 0 def find in tree node,find condition,stack depth assert stack depth max stack depth deeper than max depth stack depth ...

二叉樹 二叉查詢樹

構建二叉樹,判斷是否為二叉查詢樹,遞迴先序遍歷,非遞迴中序遍歷 include include include include using namespace std 二叉樹結點 struct treenode 鍊錶結點 struct listnode struct tempnodetempnode...

二叉樹 二叉查詢樹

二叉樹 binary tree 一種樹型結構,每個節點最多擁有兩個節點。如下圖 幾種型別的二叉樹 1.full binary tree 每個節點的孩子數 是 0 或者 2.對高度沒有要求。如下圖 2.perfect binary tree 這個就是最完美的樹,顧名思義,所有葉子節點都有相同的深度,並...