2016-06-10 78 views
1

這是代碼。這是一個標準的二叉樹類。在不使用臨時變量的情況下交換類中的變量

​​

在else子句,我可以除去叔變量,只是這樣做:

BinaryTree(newNode).leftChild, self.leftChild = self.leftChild, BinaryTree(newNode) 

將這項工作?它看起來像我調用BinaryTree類兩次,會創建兩個不同的實例嗎?

+1

你可以採取左/右孩子爲可選參數'__init__',那麼你可以做'self.leftChild =二叉樹(newNode,leftChild = self.leftChild)'(這也將節省你明確檢查的麻煩'如果self.leftChild == None' –

+1

要回答你的問題,是的。你最終會創建兩個不同的實例。 –

+0

你不會有任何引用新創建的對象在那個電話之後,它會被垃圾收集。 –

回答

1

不幸的是,您需要能夠跟蹤新創建的BinaryTree實例和之前的​​值,同時您已經編寫了它,但在此場景中使用同時分配將不起作用。

不過,如果你允許leftChild在構造函數中指定了新的BinaryTree實例可以與​​創建馬上:

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中手動執行此操作。

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 
相關問題