二分木で DFS を実行しようとしています。ツリーは有効です。関数自体は、yield が print に置き換えられた場合 (ジェネレーターでない場合) に機能します。
class BinaryTree(object):
def __init__(self, root):
self.root = root
def dfs(self):
print "Depth First"
return self.depth(self.root)
def depth(self, Node):
print "Starts"
yield Node
if Node.left != None:
print "keep it up left"
self.depth(Node.left)
if Node.right != None:
print "keep it up right"
self.depth(Node.right)
print "oh no"
編集:メインからの抜粋:
tree = BinaryTree(15) #adds the key 15 as the root
tree.addKey(10) #adds additional entries
...
tree.addKey(5)
depthFirstSearch = tree.dfs()
for i in range(8):
print depthFirstSearch.next()
print "outside of fnc"
完全を期すために、ツリーは次のようになります。
{15: {10: {3: {2: , }, {5: , }}, }, {17: , {60: {23: , }, }}}
出力は次のようになります。
Depth First
Starts
15
outside of fnc
keep it up left
keep it up right
oh no
明らかに、'keep it up' デバッグ行があるため、ノードがそこにあります。ただし、再帰ステップをスキップしているようです。そうしないと、Start again が出力されます。私は利回りを self.depth(Node.right) ステートメントに追加して置き換えようとしましたが、それは何の役にも立たないようです。return ステートメントは、ジェネレーター内でも適切ではありません。これは私には理にかなっています。ありがとう!