Merhabalar, ev ödevim sorunlarımdan birini basitleştirmeye ve kodu biraz daha iyi hale getirmeye çalışıyorum. Çalıştığım şey ikili bir arama ağacı. Şu anda tüm öğeleri bulur ve bunları bir listeye koyar benim Tree()
sınıfında bir işlev var.self.xxxx öğesini varsayılan parametre olarak kullanma - Python
tree = Tree()
#insert a bunch of items into tree
sonra ağaçtan bütün düğümlerin almak benim makeList() işlevini kullanın ve bir liste koyar. makeList()
işlevini çağırmak için tree.makeList(tree.root)
yapıyorum. Bana göre bu biraz tekrarlı görünüyor. tree.
ile ağaç nesnesini zaten arıyorum çünkü tree.root
sadece küçük bir yazmanın israfıdır.
Şu anda makeList fonksiyonudur:
def makeList(self, aNode):
if aNode is None:
return []
return [aNode.data] + self.makeList(aNode.lChild) + self.makeList(aNode.rChild)
Ben anot giriş varsayılan bir parametre (çalışmıyor) gibi aNode = self.root
Bununla işlevini çalıştırabilir bu şekilde, tree.makeList()
yapmak istiyorum.
İlk soru, neden işe yaramıyor?
İkinci soru, çalışabileceği bir yol var mı? Gördüğünüz gibi makeList()
işlevi tekrarlayıcıdır, bu yüzden işlevin başında hiçbir şey tanımlayamıyorum veya sonsuz bir döngü elde ediyorum.
DÜZENLEME İşte istendiği gibi tüm kodu:
varsayılan argümanlar değil çağrı zamanda fonksiyon tanımı anda değerlendirilir çünkü çalışmıyorclass Node(object):
def __init__(self, data):
self.data = data
self.lChild = None
self.rChild = None
class Tree(object):
def __init__(self):
self.root = None
def __str__(self):
current = self.root
def isEmpty(self):
if self.root == None:
return True
else:
return False
def insert (self, item):
newNode = Node (item)
current = self.root
parent = self.root
if self.root == None:
self.root = newNode
else:
while current != None:
parent = current
if item < current.data:
current = current.lChild
else:
current = current.rChild
if item < parent.data:
parent.lChild = newNode
else:
parent.rChild = newNode
def inOrder(self, aNode):
if aNode != None:
self.inOrder(aNode.lChild)
print aNode.data
self.inOrder(aNode.rChild)
def makeList(self, aNode):
if aNode is None:
return []
return [aNode.data] + self.makeList(aNode.lChild) + self.makeList(aNode.rChild)
def isSimilar(self, n, m):
nList = self.makeList(n.root)
mList = self.makeList(m.root)
print mList == nList
Modül düzeyinde bir yöntemle 'kendi' ile ne yapmak istersiniz? Bu kesinlikle hiçbir şey yapmaz. MakeList2() bir sınıf yöntemi ise, lütfen bağlam olmadan snippet'leri doğru kodla belirtin. –
makeList2() makeList() olduğunu varsayıyordu, ben düzenledim – crh878
Bu nasıl bir anlam ifade etmiyor? MakeList() işlevimi daha basit bir şekilde aramak yerine ağacın kökü için bir varsayılan parametre kullanarak kullanmaya çalışıyorum. – crh878