nasıl ben python ikili arama ağaçları temsil ediyor?
Python ikili arama ağaçları temsil
class Node(object):
def __init__(self, payload):
self.payload = payload
self.left = self.right = 0
# this concludes the "how to represent" asked in the question. Once you
# represent a BST tree like this, you can of course add a variety of
# methods to modify it, "walk" over it, and so forth, such as:
def insert(self, othernode):
"Insert Node `othernode` under Node `self`."
if self.payload <= othernode.payload:
if self.left: self.left.insert(othernode)
else: self.left = othernode
else:
if self.right: self.right.insert(othernode)
else: self.right = othernode
def inorderwalk(self):
"Yield this Node and all under it in increasing-payload order."
if self.left:
for x in self.left.inorderwalk(): yield x
yield self
if self.right:
for x in self.right.inorderwalk(): yield x
def sillywalk(self):
"Tiny, silly subset of `inorderwalk` functionality as requested."
if self.left:
self.left.sillywalk()
print(self.payload)
if self.right:
self.right.sillywalk()
vs, vs - temelde (Java, C #, vb gibi) başvurular ziyade işaretçileri kullanan başka bir dilde gibi.
Düzenleme :
Tabii ki, varlığının sillywalktam olarak aynı işlevselliği üstüne bir tüy yolma astar dış pasajı, çünkü gerçekten de saçma walkyöntemiyle:
for x in tree.walk(): print(x.payload)
ve ile walkbirlikte, satarken, sadece düğümleri-in-order akışında herhangi bir başka işlevi hakkında elde edebilirsiniz sillywalk, sadece diddly-bodur hakkında elde edebilirsiniz. Ama, hey, OP diyor yield(? Kaç Python 2.6 diğerinin 30 anahtar kelime OP'ın yargısına böyle korkutmak kelimeleri hak acaba -) "korkutucu" olduğunu bu yüzden umuyorum printdeğil!
Bu üzerinde, hepsi tamamen gerçek soru dışındadır temsil BSTS: o soru tamamen cevaplanır __init__- Bir payloaddüğümün yükü tutun için nitelik leftve rightya tutmak için özellik Nonebir ya da (anlam, bu düğüm hiçbir o tarafta torunlara sahip) Node( uygun tarafında soyundan alt ağacının üst). Tabii ki, TSİ kısıtlama daha büyük bir yük vardır, her bir düğüm (eğer varsa) her sol soyundan (eğer varsa yeniden) bir faydalı yük daha az ya da buna eşit, söz konusu düğümün her doğru bir daha sahip olduğu - ı ilave insertsadece , o kısıtlamasını korumak için ne kadar önemsiz göstermeye walk(şimdi ve sillywalko yükleri artış sırasına bütün düğümleri almak için ne kadar önemsiz göstermeye). Yine, genel fikir şeklinden sadece aynıdır temsil örneğin, C # ve Java için, gibi yerine işaretçiler daha referanslar kullanan herhangi bir dilde bir BST'yi.













