私のバイナリツリー構造を変換するアルゴリズムを探しています。自分のクラスから、すべてのノードにnode.value、node.leftChild、node.rightChildがある場所を探します。このツリーをNewickフォーマットに変換して、リーフとツリーの構造だけを変換する必要があります。リーフだけを含む文字列にツリーを変換します
enter image description hereのような木が
(その内部ノードなし)(B、(E、F))にならなければならない私は最善の方法は、再帰的に私のツリーをトラバースして文字列を構築することだと思うが、私は常にエラーを持っています特定の木のために。
class binarynode(object):
def __init__(self, value, left = None, right = None,parent =None):
self.parent = parent
self.value = value
self.left = left
self.right = right
def isleaf(self):
return ((self.right == None) and (self.left ==None))
def convertTReeAux(self):
printValue = str(self.value)
if (self.isleaf() and self.parent == None):
ret = '('+printValue+')'
elif (self.isleaf() and (self.parent.left.value == self.value) and (self.parent.right.isleaf())) :
ret = '('+str(printValue)+','
elif (self.isleaf() and self.parent.right.value==self.value and self.parent.left.isleaf() and self.parent.parent !=None and self.parent.parent.right == self.parent):
ret = str(printValue)+'))'
elif (self.isleaf() and self.parent.right.value==self.value and self.parent.left.isleaf()):
ret = str(printValue)+')'
elif (self.isleaf() and (self.parent.left.value == self.value) and (not self.parent.right.isleaf())):
ret = '('+str(printValue)+','
elif (self.isleaf() and self.parent.right.value ==self.value and (not self.parent.left.isleaf())):
ret = ','+str(printValue)+')'
elif((not self.isleaf()) and (self.parent!= None) and (self.parent.left == self) and (not self.parent.right.isleaf())):
ret = ""
elif((not self.isleaf()) and (self.parent!= None) and (self.parent.right ==self) and (not self.parent.left.isleaf())):
ret="),"
elif((not self.isleaf()) and (self.parent!= None) and (self.parent.left ==self) and (not self.parent.left.isleaf())):
ret="("
else:
ret = ''
if(self.left != None):
ret += (self.left.convertTReeAux())
if(self.right != None):
ret += (self.right.convertTReeAux())
return ret
質問はより具体的にするために、私たちにあなたがこれまで – Yunhe
、私は接続の可能なすべてのカップルをカバーしたいので、私は、テストの場合のたくさんの汚いコードに追加した@Yunhe達成コードを表示してください。例えば葉と葉、葉と節、... –
変換したい木のデータ構造を教えてください。 – Yunhe