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

如何可视化打印Python中tburette/mtree实现的MTree结构

解决MTree递归可视化打印的问题

针对你使用的MTree实现,直接遍历节点的entries属性而非用pop()就能避免破坏树结构,同时通过区分内部节点和叶子节点的递归逻辑,可以清晰打印树的层级结构:

核心思路

该MTree实现的节点分为两种类型:

  • InternalNode:包含entries列表,每个Entry的child属性指向子节点(内部节点或叶子节点),data是该条目对应的中心数据
  • LeafNode:包含data_points列表,存储实际的整数数据

递归打印时,只需遍历节点的可迭代属性(而非弹出元素),用缩进区分层级即可。

实现代码

from mtree.nodes import InternalNode, LeafNode  # 根据实际导入路径调整

def print_mtree(node, indent=0):
    indentation = "  " * indent
    if isinstance(node, InternalNode):
        print(f"{indentation}InternalNode | 条目数: {len(node.entries)}")
        for entry in node.entries:
            # 若需要打印条目半径,可添加 entry.radius
            print(f"{indentation}  → 中心数据: {entry.data}")
            print_mtree(entry.child, indent + 2)
    elif isinstance(node, LeafNode):
        print(f"{indentation}LeafNode | 数据点: {node.data_points}")
    else:
        print(f"{indentation}[未知节点类型]: {type(node)}")

# 调用示例(假设你的MTree实例名为my_mtree)
print_mtree(my_mtree.root)

关键注意事项

  1. 避免破坏树结构:直接遍历node.entries而非使用pop(),后者会移除条目并修改树的原始结构
  2. 层级可视化:通过indent参数控制缩进,让输出的树结构层级清晰
  3. 扩展信息:如果需要查看每个条目的半径信息,可在打印Entry时加上entry.radius字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:11:29