【数据结构】二叉搜索树的python实现
二叉搜索树是以二叉树来组织的,对于一个二叉搜索树的节点,其左子树节点的元素值都不大于该节点元素值,其右子树节点的元素值都不小于该节点的元素值。
首先定义一个初始化二叉搜索树节点的类TNode,每一个节点包括节点元素值val,指向父节点的地址par,指向左子树的地址left,指向右子树的地址right。
class TNode(object):
'''
初始化树节点
'''
def __init__(self,val):
self.val = val
self.par = None
self.left = None
self.right = None
然后定义二叉搜索树的类BST,包括初始化根节点的函数__init__。
class BST(object):
#1.初始化根节点
def __init__(self):
self.root = None
判断二叉搜索树是否为空的函数isEmpty。
#2.判断二叉树是否为空
def isEmpty(self):
if self.root == None:
return True
else:
return False
向二叉搜索树种插入新节点的函数add。采用递归方法,如果新节点的元素值小于当前节点的元素值,判断当前节点是否有左子树?如果没有,新的节点作为当前节点的左子树节点;如果有,继续与当前节点的左子树根节点比较。如果新节点元素大于当前节点的元素值,判断当前节点是否有右子树?如果没有,新节点作为当前节点的右子树节点;如果有,继续与当前节点的右子树根节点比较。
#3.插入节点
def add(self,data):
'''
input:data:待插入的节点数据
'''
#首先判断二叉树是否为空,如果为空,节点作为根节点
if self.isEmpty():
node = TNode(data)
self.root = node
else:
#递归函数,如果节点小于父节点,且父节点没有左子节点,则作为父节点的左子节点;如果父节点有左子节点,将节点插入到左子树中。
def insert(cur_node,data):
if data <= cur_node.val:
if cur_node.left:
insert(cur_node.left,data)
else:
node = TNode(data)
cur_node.left = node
node.par = cur_node
elif data >= cur_node.val:
if cur_node.right:
insert(cur_node.right