python - 创建 BST : python 的最佳实践

标签 python insert binary-search-tree

因此,我正在实现一个二叉搜索树,但对于我是否应该有一个 Node 类 以及一个 Bst 类 还是只有一个类感到困惑。

原因是因为我知道 BST 是由节点组成的,但在任何时候你都可以使用一个节点和它下面的所有节点,这本质上也是一个 BST。

如果我有以下代码,那么我在插入时可以像这样调用我的代码 self.left.insert(data)

class Bst():
def __init__(self, data):
    self.data = data
    self.left = None
    self.right = None

def insert(self, data):
    node_to_insert = Bst(data)
    if data < self.data:
        if self.left is None:
            self.left = Bst(data)
        else:
            self.left.insert(data)
    else:
        if self.right is None:
            self.right = Bst(data)
        else:
            self.right.insert(data)

如果我用另一种方式做,它们是两个独立的东西 NodeBST 那么在我的插入方法中我有 self.insert(data , 节点.left):

class Node():
    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None

class Bst():
    def __init__(self, root=None):
        self.root = root

    def insert(self, data, node):
        node_to_insert = Node(data)

        if node is None:
            node = node_to_insert
        else:
            if data < node.data:
                if node.left is None:
                    node.left = node_to_insert
                else:
                    self.insert(data, node.left)
            else:
                if node.right is None:
                    node.right = node_to_insert
                else:
                    self.insert(data, node.right)

所以我的问题是 self.insert(data, node.left)self.left.insert(data) 哪个更好。

我假设 self.left.insert(data) 当用户插入时他们只需要写 bst.insert(5)他们说的一个 bst.insert(bst.root, 5)

最佳答案

我认为第二个更好。算法与数据结构分离,带来更大的灵 active 。例如涉及父节点的删除操作,第二种比第一种更容易实现。

关于python - 创建 BST : python 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20659108/

相关文章:

java - 确定BST的高效算法

algorithm - 从全黑红黑树中删除节点

python - 在 crontab 中设置路径的正确方法是什么?

python - 这是在 DataFrame 中设置值的安全方法吗?为什么这有效?

python - 我应该在哪里保存应用程序的数据?

sql - 通过读取一些 MySQL 转储来忽略 mysql 中的错误

arrays - Matlab:在指定位置插入多个元素

c - 二叉搜索树,Valgrind 条件跳转或移动取决于未初始化的值

python - 在 Python (Pandas) 中将长数据 reshape 为宽数据

php - $_POST 未插入数据库 - PHP MySQL