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

相关文章:

猜你喜欢
  • 2021-06-29
  • 2022-12-23
  • 2021-09-04
  • 2021-11-04
  • 2021-08-26
相关资源
相似解决方案