我有一个方法可以在树中创建一个新节点 - 左或右。如果该值低于我当前的值,则将其插入左侧,否则插入右侧。
我想重构这段代码,所以我首先看到我必须在哪一侧插入我的元素,然后插入它。在我实施两次之前:一次是左侧,一次是右侧。
目前看起来像这样:
def neu(self, sortByValue, secondValue):
child = self.left if(sortByValue.lower() < self.value[0].lower()) else self.right
if(child == None):
child = MyTree(sortByValue,secondValue)
else: child.neu(sortByValue,secondValue)
我的问题是,self.left是None,self.right是None。因此,当我将child创建为变量并将其设置为MyTree(...)时,self.left和self.right不会接收该值。
我能做些什么来改善这个?谢谢!
答案 0 :(得分:2)
在Python中,变量是名称而不是位置。例如:
>>> a = 1
>>> b = a
>>> a = 2
>>> print b
1
在您的代码中,您只需将名称child
重新绑定到不同的值(您的新节点),这对先前绑定的值(无)没有影响。
这是一个代码的改造,应该做你想要的(未经测试):
def neu(self, sortByValue, secondValue):
def child(node):
if(node is None):
return MyTree(sortByValue, secondValue)
else:
child.neu(sortByValue, secondValue)
return node
if(sortByValue.lower() < self.value[0].lower()):
self.left = child(self.left)
else:
self.right = child(self.right)
答案 1 :(得分:0)
self.left
或self.right
未收到该值,因为您指定的child
只包含目标值的副本且未对其进行引用。
你想要一个指针 - 这在Python中不存在。
您可以使用类包装器来表达这一点,但我认为当您在if子句中编写两种可能性时,它更容易理解。
答案 2 :(得分:0)
你为什么要使用树?
我会用字典:
初始化:
tree = {}
添加新节点:
tree [sortByValue] = secondValue
提取东西
打印树[sortByValue]
不是直接的答案,而是一种更加抒情的方式