这是代码。它是标准的二进制树类。
class BinaryTree:
def __init__(self,rootObj):
self.key = rootObj
self.leftChild = None
self.rightChild = None
def insertLeft(self,newNode):
if self.leftChild == None:
self.leftChild = BinaryTree(newNode)
else:
t = BinaryTree(newNode)
t.leftChild = self.leftChild
self.leftChild = t
在else子句中,我可以删除t变量并简单地执行此操作:
BinaryTree(newNode).leftChild, self.leftChild = self.leftChild, BinaryTree(newNode)
这会有用吗?看起来我两次调用BinaryTree类,是否会创建两个不同的实例?
答案 0 :(得分:1)
不幸的是,您需要能够在编写的同时跟踪新创建的BinaryTree
实例和之前的self.leftChild
值,并且使用同时分配将不起作用场景。
但是,如果您允许在构造函数中指定leftChild
,则可以立即使用BinaryTree
创建新的self.leftChild
实例:
class BinaryTree:
def __init__(self,rootObj, leftnode=None, rightnode=None):
self.key = rootObj
self.leftChild = leftnode
self.rightChild = rightnode
def insertLeft(self,newNode):
#if self.leftChild == None: pass leftnode=None to constructor.
# which is the same as passing leftnode=self.leftChild
self.leftChild = BinaryTree(newNode, leftnode = self.leftChild)
这样,新创建的节点在初始化时就会设置自己的leftChild
属性,因此无需在insertLeft
中手动执行此操作。
答案 1 :(得分:0)
在BinaryTree
中,您必须创建一个临时变量,因为使用Object。如果是整数可以是:
a = 5
b = 3
a += b # a = 8
b = a - b # b = 5
a -= b # a = 3
print(a)
>>3
print(b)
>>5