python實現二叉查詢樹的查詢 插入 刪除操作

2021-10-02 18:57:50 字數 2569 閱讀 6736

本文用python3實現二叉查詢樹的查詢、插入、刪除操作。

完整**:

查詢操作:先取根節點,如果它等於要查詢的數那就返回。如果要查詢的數比根節點的值小,就在左子樹中遞迴查詢;如果要查詢的數比根節點的值大,那就在右子樹中遞迴查詢。

def search(self, data):

res =

node = self.root

while node:

if data < node.val:

node = node.left

else:

if data == node.val:

node = node.right

return res

插入操作:從根節點開始,依次比較要插入的資料與節點的大小關係。如果插入的資料比節點的大,並且節點的右子樹為空,就將資料直接插到右子節點的位置;如果右子樹不為空,就在遞迴遍歷右子樹,查詢插入位置。如果要插入的資料比節點的小,並且節點的左子樹為空,就將資料直接插到左子樹的位置;如果左子樹不為空,就再遞迴遍歷左子樹,查詢插入位置。

def insert(self, data):

if self.root is none:

self.root = treenode(data)

else:

node = self.root

while node:

p = node

if data < node.val:

node = node.left

else:

node = node.right

new_node = treenode(data)

new_node.parent = p

if data < p.val:

p.left = new_node

else:

p.right = new_node

return true

刪除操作:分三種情況進行討論。

①要刪除的節點沒有子節點:直接將父結點中指向要刪除節點的指標置為null。

②要刪除的節點只有乙個子節點(只有左子節點或者右子節點):更新父節點中,指向要刪除節點的指標,讓它指向要刪除節點的子節點即可。

③要刪除的節點有兩個子節點:首先找到要刪除節點的右子樹中的最小節點,把它的值替換到要刪除的節點上。然後再刪除掉這個最小節點即可。

def _del(self, node):

# 1if node.left is none and node.right is none:

if node == self.root:

self.root = none

else:

if node.val < node.parent.val:

node.parent.left = none

else:

node.parent.right = none

node.parent = none

# 2elif node.left is none and node.right is not none:

if node == self.root:

self.root = node.right

self.root.parent = none

node.right = none

else:

if node.val < node.parent.val:

node.parent.left = node.right

else:

node.parent.right = node.right

node.right.parent = node.parent

node.parent = none

node.right = none

elif node.left is not none and node.right is none:

if node == self.root:

self.root = node.left

self.root.parent = none

node.left = none

else:

if node.val < node.parent.val:

node.parent.left = node.left

else:

node.parent.right = node.left

node.left.parent = node.parent

node.parent = none

node.left = none

# 3else:

min_node = node.right

if min_node.left:

min_node = min_node.left

if node.val != min_node.val:

node.val = min_node.val

self._del(min_node)

else:

self._del(min_node)

self._del(node)

二叉查詢樹python實現

1.二叉查詢樹的定義 左子樹不為空的時候,左子樹的結點值小於根節點,右子樹不為空時,右子樹的結點值大於根節點,左右子樹分別為二叉查詢樹 2.二叉查詢樹的最左邊的結點即為最小值,要查詢最小值,只需遍歷左子樹的結點直到為空為止,同理,最右邊的結點結尾最大值,要查詢最大值,只需遍歷右子樹的結點直到為空為止...

二叉查詢樹(增 刪 查)

原理 按照大的向右小的向左原則,沿著樹的根節點往下找,找到第乙個為空的節點或者節點的key和目標key相同時結束,前者插入,後者替換。description 插入節點 param key param value author wjc920 date 2018年6月26日 public void pu...

二叉查詢樹,實現

public class binarytree 移除乙個節點 分三種情況,乙個是 該節點本身是葉子,乙個是 該節點含有乙個兒子節點 乙個是 該節點還有兩個兒子節點 param e param comareelement private binarynoderemove element e,binar...