本文用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...