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

如何在Python AnyTree中获取叶子节点到根节点的路径?

解决AnyTree获取节点到根节点路径的问题

方法1:利用Node内置的path属性

AnyTree的Node对象自带path属性,会返回从根节点到当前节点的节点对象列表。只需反转列表,再提取每个节点的名称即可实现需求:

from anytree import Node

# 构建示例树结构
f = Node("f")
b = Node("b", parent=f)
d = Node("d", parent=b)
e = Node("e", parent=d)

# 获取路径
path_nodes = e.path  # 结果:[Node('/f'), Node('/f/b'), Node('/f/b/d'), Node('/f/b/d/e')]
path_names = [node.name for node in reversed(path_nodes)]
print(path_names)  # 输出:['e', 'd', 'b', 'f']

如果要封装成你想要的ShowMePath函数:

def ShowMePath(node, root=None):
    path_nodes = node.path
    # 若指定root,仅返回从node到root的路径(需确保root是node的祖先)
    if root:
        try:
            idx = path_nodes.index(root)
            path_nodes = path_nodes[idx:]
        except ValueError:
            return []  # root不是node祖先时返回空列表
    return [n.name for n in reversed(path_nodes)]

# 调用示例
print(ShowMePath(e, f))  # 输出:['e', 'd', 'b', 'f']

方法2:拆分节点的字符串表示

如果需要处理Node('/f/b/d/e')这类字符串输出,可直接提取路径部分拆分:

node_str = str(e)  # 得到:"Node('/f/b/d/e')"
# 提取引号内的路径,按/分割后过滤空字符串,再反转
path_parts = node_str.split("'")[1].split("/")[1:]  # 结果:['f', 'b', 'd', 'e']
path_names = list(reversed(path_parts))
print(path_names)  # 输出:['e', 'd', 'b', 'f']

补充说明

你提到的PostOrderIter这类迭代器用于遍历分支节点,和路径获取无关。path属性是AnyTree官方内置的路径获取方式,属于基础功能,可能之前查阅文档时未留意到。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 02:06:25