【发布时间】:2017-08-01 03:25:40
【问题描述】:
我在 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())
上面的代码是正确的,逻辑上。
现在我没有将数据打印出来,而是尝试将其转换为生成器并生成节点,以便其他方法可以用它做其他事情。
我查看了有关堆栈溢出的其他问题/答案,并修改了我的代码以产生而不是打印如下。
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
但上面的代码并没有给出与简单地打印节点值的代码相同的输出,即使我认为它们在逻辑上应该是相同的。很明显,我试图将我的方法变成生成器的尝试是不正确的。
我的问题是如何转换我的原始代码以产生节点而不是正确打印出来?
【问题讨论】:
-
输出有何不同?你能提供一些示例输入/输出吗?