You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Graphviz渲染通用树异常:仅显示根节点与两个子节点,其余缺失

问题原因

你的代码里每个节点调用show()时都会新建一个graphviz.Digraph实例,根节点的图只包含自身和直接子节点,子节点的show()会生成独立的图形文件,最终你看到的只是根节点生成的那部分,深层节点的内容根本没合并到主图里。

修复代码

保持TreeNode类不变

from typing import Any, List
import graphviz

class TreeNode:
    value: Any
    children: List['TreeNode']

    def __init__(self, value: Any) -> None:
        self.value = value
        self.children = []

修改show方法,共用同一个图实例

def show(self):
    dot = graphviz.Digraph("Tree", format="png")
    self._build_graph(dot)
    dot.render(directory='doctest-output').replace('\\', '/')

def _build_graph(self, dot: graphviz.Digraph):
    # 用id确保节点标识唯一,避免不同节点的str表示重复
    node_id = str(id(self))
    dot.node(node_id, str(self.value))
    
    for child in self.children:
        child._build_graph(dot)
        dot.edge(node_id, str(id(child)))
关键说明
  • 拆分出_build_graph递归方法,让整个树共用同一个Digraph实例,所有节点和边都添加到这张图里
  • 使用id(self)作为节点ID,避免不同节点因默认对象字符串可能出现的重复问题
  • 只在根节点的show()里执行一次渲染,确保所有节点都被包含在最终的PNG中

内容的提问来源于stack exchange,提问作者mkownak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 17:40:45