二分木のきれいなプロットを作成したいと思います。
これが私のカスタム BinaryTree クラスです。
class BinaryTree():
def __init__(self, data):
self.data = data
self.right = None
self.left = None
ここで、このグラフをプロットするために networkx ライブラリを使用するので、グラフを networkx オブジェクトに変換してから、graphviz を使用してプロットする必要があります。問題はエッジ リストです。新しいオブジェクトを作成するには、エッジが必要です。
たとえば、次の図のような二分木があるとします。
エッジ リストを取得する必要があります。次のようになります。
[(0,1),(0,2),(2,3),(2,4)]
私の場合、ノードに id がないことに注意してください。では、どうすればこれを行うことができますか?深さを考慮した再帰関数である可能性があると思いますが、いくつかの問題があるため、少し助けていただければ幸いです。;)
編集
答えてくれてありがとう。しかし、私は自分でうまくいく解決策を見つけました..:P ここにあります:
def edgelist(node, output, id=0):
if node is None or isinstance(node, bt.Leaf):
return output
if node.left:
output.append((id, id*2+1))
if node.right:
output.append((id, id*2+2))
edgelist(node.left, output, id*2+1)
edgelist(node.right, output, id*2+2)
return output