我想为我的二叉树画一个漂亮的图。
这是我的自定义 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