BinaryTreeクラスで、ジグザグの方法でツリーをトラバースするメソッドを作成しました。再帰関数からジェネレータを作成する
def zigzag_traversal(self,l2r_flag=True,node=DEFAULT):
"""
traverse binary tree in zigzag manner
ALG: pass an additional boolean variable. if variable is true call left to right,
if variable is false call right to left
"""
if node == DEFAULT:
node = self.__root
if node is None:
return
if node is not None:
print node.getData()
if l2r_flag == True:
self.zigzag_traversal(False,node.getRight())
self.zigzag_traversal(False,node.getLeft())
else:
self.zigzag_traversal(True,node.getLeft())
self.zigzag_traversal(True,node.getRight())
上記のコードは、論理的に正しいです。
データを出力する代わりに、これをジェネレータに変換してノードを生成しようとしています。そのため、他のいくつかの方法で他の方法を実行できるようになりました。
スタックオーバーフローに関する他の質問/回答を見て、以下のようにprintの代わりにyieldするようにコードを修正しました。
def zigzag_traversal(self,l2r_flag=True,node=DEFAULT):
"""
traverse binary tree in zigzag manner
ALG: pass an additional boolean variable. if variable is true call left to right,
if variable is false call right to left
"""
if node == DEFAULT:
node = self.__root
if node is None:
return
if node is not None:
yield node
if l2r_flag == True:
for node in self.zigzag_traversal(False,node.getRight()):
yield node
for node in self.zigzag_traversal(False,node.getLeft()):
yield node
else:
for node in self.zigzag_traversal(True,node.getLeft()):
yield node
for node in self.zigzag_traversal(True,node.getRight()):
yield node
しかし、上記のコードは、単に私が彼らは論理的に同じことになっていると思っていても、ノード値を出力コードと同じ出力を与えるものではありません。私のメソッドをジェネレータに変換しようとする私の試みは間違っています。
私の質問は、ノードを正しく印刷するのではなく、元のコードを変換する方法です。
出力はどのように異なりますか?いくつかのサンプル入出力を提供できますか? –