对于二叉查找树的每个节点Node,它的左子树中所有的关键字都小于Node的关键字,而右子树中的所有关键字都大于Node的关键字。
二叉查找树的平均深度是O(log N)。
1.初始化
class BinarySearchTree(object):
def __init__(self,key):
self.key=key
self.left=None
self.right=None
2.Find
def find(self,x):
if x==self.key:
return self
elif x
return self.left.find(x)
elif x>self.key and self.right:
return self.right.find(x)
else:
return None
3.FindMin和FindMax
分别返回树中的最小元素与最大元素的位置。FindMin,从根开始并且只要有左儿子就向左进行查找,终止点是最小元素。FindMax则向右进行。
def findMin(self):
if self.left:
return self.left.findMin()
else:
return self
def findMax(self):
tree=self
if tree:
while tree.right:
tree=tree.right
return tree
4.Insert
为了将x插入到树Tree中,先用find查找,如果找到x,则什么也不做。否则,将x插入到遍历路径的最后一点。
来自《Problem Solving with Algorithms and Data Structures》的图片:
def insert(self,x):
if x
if self.left:
self.left.insert(x)
else:
tree=BinarySearchTree(x)
self.left=tree
elif x>self.key:
if self.right:
self.right.insert(x)
else:
tree=BinarySearchTree(x)
self.right=tree
5.Delete
删除某节点有3种情况:
5.1 如果节点是一片树叶,那么可以立即被删除。
来自《Problem Solving with Algorithms and D