1、二叉搜索树又名有序二叉树,结点元素按固定次序排布,使得我们可以在进行查找时使用二分搜索提高效率。它最明显的特征是父结点值大于左子树任意结点值,小于右子树任意结点值。
2、二叉搜索插入、结点检查、结点删除以及平衡的解释
1)插入
假设以这种顺序插入结点:50、76、21、4、32、100、64、52
1.1)50会是初始的根结点
1.2)再依次进行如下操作
a)76大于50,置于右边
b)21小于50,置于左边
c)4置于21左边
3)最终得到
class BinarySearchTree:
def __init__(self, value):
self.value = value
self.left_child = None
self.right_child = None
def insert_node(self, value):
if value <= self.value and self.left_child:
self.left_child.insert_node(value)
elif value <= self.value:
self.left_child = BinarySearchTree(value)
elif value > self.value and self.right_child:
self.right_child.insert_node(value)
else:
self.right_child = BinarySearchTree(value)
2)结点搜索
a)从根结点开始
b)小于对应结点值左转、大于右转,等于报告找到
c)走到叶子结点都没有找到GG,报告没有该元素
class BinarySearchTree:
def __init__(self, value):
self.value = value
self.left_child = None
self.right_child = None
def find_node(self, value):
if value < self.value and self.left_child:
return self.left_child.find_node(value)
if value > self.value and self.right_child:
return self.right_child.find_node(value)
return value == self.value
3)删除:移除并重构
4)其他
4.1)清零:将三个属性全部置None即可
def clear_node(self):
self.value = None
self.left_child = None
self.right_child = None
4.2)找到最小值:从根结点开始,一直左转,直到找不到任何结点为止
def find_minimun_value(self):
if self.left_child:
return self.left_child.find_minimum_value()
else:
return self.value