我正在尝试编写一个自定义二叉树类。我已经有了节点:
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++中是可行的,因为我只需传递指向方法的指针。
如何创建向树添加值的方法?我想我可能漏掉了一些很明显的东西。
发布于 2019-05-26 16:59:56
您需要将创建的节点附加到树的分支。
试试这个:
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)
https://stackoverflow.com/questions/56318358
复制