1.二叉搜索树(BST)性质:小于父节点的键都在左子树中,大于父节点的键都在右子树中。
我们采用“节点与引用”表示法实现二叉搜索树,由于必须创建并处理一颗空的二叉搜索树,所以我们将使用两个类,一个为BinarySearchTree,另一个为TreeNode,具体实现代码如下。
class BinarySearchTree:
def __init__(self):
self.root=None
self.size=0
def length(self):
return self.size
def __len__(self):
return self.size
def __iter__(self):
return self.root.__iter__()
class TreeNode:
def __init__(self,key,val,left=None,right=None,parent=None):
self.key=key
self.payload=key
self.leftChild=left
self.rightChild=right
self.parent=None
def hasLeftChild(self):
return self.leftChild
def hasRightChild(self):
return self.rightChild
def isLeftChild(self):
return self.parent and self.parent.leftChild==self
def isRightChild(self):
return self.parent and self.parent.rightChild==self
def isRoot(self):
return not self.parent
def isLeaf(self):
return not (self.rightChild or self.leftChild)
def hasAnyChildren(self):
return self.rightChild or self.leftChild
def hasBothChildre(self):
return self.leftChild and self.rightChild
def replaceNodeData(self,key,value,lc,rc):
self.key=key
self.payload=value
self.leftChild=lc
self.rightChild=rc
if self.hasLeftChild():
self.leftChild.parent=self
if self.hasRightChild():
self.rightChild.parent=self