Python中的自定义二叉树对象

Python中的自定义二叉树对象,python,python-3.x,data-structures,Python,Python 3.x,Data Structures,我正在尝试编写一个自定义的二叉树类。我已经有了节点: class Node: def __init__(self, value, **kwargs): self.value = value self.kwargs = kwargs for key, value in kwargs.items(): setattr(self, key, value) def __str__(self): main_str = '{value: ' + str(

我正在尝试编写一个自定义的二叉树类。我已经有了节点:

class Node:

def __init__(self, value, **kwargs):
    self.value = value
    self.kwargs = kwargs

    for key, value in kwargs.items():
        setattr(self, key, value)

def __str__(self):
    main_str = '{value: ' + str(self.value)
    for key, value in self.kwargs.items():
        main_str += ', ' + str(key) + ': ' + str(value)
    main_str += '}'

    return main_str
节点使用kwargs,因为我还将其用于其他用途。我遇到的问题是树类:

from models.node import Node
class BinarySearchTree:

    def __init__(self):
        self.root = None

    def add_element(self, value):
        node = Node(value, left=None, right=None)

        if not self.root:
            self.root = node

        else:
            self.__add_element_recursive(self.root, value)

    def __add_element_recursive(self, parent, value):

        if not parent:
            node = Node(value, left=None, right=None)
            parent = node

        elif value > parent.value:
            self.__add_element_recursive(parent.right, value)

        else:
            self.__add_element_recursive(parent.left, value)
这显然不起作用,因为python中的参数不是作为引用传递的,而是作为新实例传递的。例如,我知道这将在C++中工作,因为我可以把指针传递给方法。
如何创建向树添加值的方法?我想我可能遗漏了一些非常明显的东西。

您需要将创建的节点附加到树的一个分支上

试试这个:

def __add_element_recursive(self, parent, value):
    if value > parent.value:
        if parent.right: # there's a right node: lets go there
            self.__add_element_recursive(parent.right, value)
        else: # No node: we have found our spot
            parent.right = Node(value, left=None, right=None)
    elif parent.left: # There's a left node...lets go there
        self.__add_element_recursive(parent.left, value)
    else: # No node: we have found our spot
        parent.left = Node(value, left=None, right=None)

不清楚您所说的
是什么意思,这显然不起作用,因为python中的参数不是作为引用传递的,而是作为新实例传递的。
如果您将
节点
实例作为参数传递,函数将收到对该节点的引用,而不是副本或新实例。。