下面的python代码将AVL树的根设置为指定的值。 但是,如果通过同一个类中的函数来设置类的根变量,则似乎没有任何效果。
class AVLTree:
class AVLNode:
def __init__(self, value) -> None:
self.value = value
def __init__(self) -> None:
self._root = None
def insert(self, value: int) -> None:
return self._insert(value, self._root)
def _insert(self, value, node):
if node is None:
node = value
return
avl = AVLTree()
avl.insert(5)
print(avl._root)
打印无
将类变量self._root
作为参数传递给成员方法似乎不会改变它的值。
我读到python通过引用传递所有类成员,仅将不可变类型(int等)作为值传递。
知道为什么我不能修改_insert
函数中的self._root
值吗? 谢谢
您可以完全控制如何调用_insert
。 不要用node=none
调用它。 类似于
def insert(self, value: int) -> None:
if self._root is None:
self._root = self.AVLNode(value)
else:
self._insert(value, self._root)
def _insert(self, value, node):
# Assume node is not None
...
(无关的是,您的AVLNode
类还必须存储指向其两个子类的指针,并且_insert
需要适当地更新这些指针。)