BST 插入在 Python 中无法正常工作

BST Insert not working properly in Python

我在 Python 中实现了 BST,但我在 but_insert(t, k) 中遇到了问题。 基本上,如果我只是将 children 添加到根目录,如下所示,它会起作用:

T = Node(7)
bst_insert(T, 9)
bst_insert(T, 5)

但是如果我插入另一个键,那么从根开始的整个分支似乎都被删除了。例如,如果我执行:

T = Node(7)
bst_insert(T, 9)
bst_insert(T, 5)
bst_insert(T, 3)

然后当我按顺序打印 T 时,我只得到 7 9.

这是 Node 构造函数和 bst_insertprint_in_order 函数正常工作,所以我没有包含它)。

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


def bst_insert(t, k):
    if t is None:
        t = Node(k)

    elif k <= t.key:
        if t.left is None:
            t.left = Node(k)
        else:
            t.left = bst_insert(t.left, k)
    else:
        if t.right is None:
            t.right = Node(k)
        else:
            t.right = bst_insert(t.right, k)

谢谢。

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


    def bst_insert(t, k):
        if t is None:
            t = Node(k)

        elif k <= t.key:
            if t.left is None:
                t.left = Node(k)
            else:
                t.left = bst_insert(t.left, k) #1
        else:
            if t.right is None:
                t.right = Node(k)
            else:
                t.right = bst_insert(t.right, k) #2
        # return the node, #1 and #2 will always get None value
        return t
from __future__ import annotations


class Node:
    def __init__(self, value: int) -> None:
        self.value = value
        self.left = self.right = None

    def __repr__(self) -> str:
        return f"{self.__class__.__name__}({self.value})"


class BST:
    def __init__(self):
        self.root = None

    def add(self, root: Node, value: int) -> Node:
        # if there is not root (empty node) -> then create new one
        if root is None:
            return Node(value)
        if value <= root.value:
            root.left = self.add(root.left, value)
        else:
            root.right = self.add(root.right, value)
        return root

    def print(self, root: Node) -> None:
        """Prints inorders BST values."""
        if root is None:
            return
        self.print(root.left)
        print(root.value, end=" ")
        self.print(root.right)


if __name__ == "__main__":
    values = [10, 6, 12, 3, 7, 4, 2]

    bst = BST()
    root = None
    for value in values:
        root = bst.add(root, value)

    bst.print(root)

    # output
    # 2 3 4 6 7 10 12