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

如何获取Python bigtree中的最左与最右叶子节点?

查找Bigtree中的最左和最右叶子节点

我正在尝试用Bigtree库查找树中的最左叶子节点和最右叶子节点,现有代码如下:

from bigtree import nested_dict_to_tree, print_tree

path_dict = {
   "name": "a",
   "points": 100,
   "side":'H',
   "children": [
      {
         "name": "b",
         "points": 50,
         "side":'L',
         "children": [
            {"name": "d", "points": 40,"side":'L'},
            {"name": "e", "points": 20,"side":'R'},
         ],
      },
      {"name": "c", "points": 60,"side":'R' ,
      
         "children": [
            {"name": "f", "points": 40,"side":'L'},
            {"name": "g", "points": 20,"side":'R'},
         ]},
   ],
}

tree_root = nested_dict_to_tree(path_dict)

print_tree(tree_root)

执行代码后,树的输出如下:

a
├── b
│   ├── d
│   └── e
└── c
    ├── f
    └── g

我需要将d识别为最右叶子节点、g识别为最左叶子节点。


实现方案

根据需求,提供两种可行的实现方式:

方法1:按分支遍历定位

如果你的需求是将**根节点左分支最深处的叶子(d)**作为最右节点,**根节点右分支最深处的叶子(g)**作为最左节点,可以用分支遍历的方式:

# 遍历左分支到底,获取节点d
def get_leftmost_leaf(node):
    current = node
    while not current.is_leaf:
        current = current.children[0]  # 始终取第一个子节点(左子节点)
    return current

# 遍历右分支到底,获取节点g
def get_rightmost_leaf(node):
    current = node
    while not current.is_leaf:
        current = current.children[-1]  # 始终取最后一个子节点(右子节点)
    return current

# 按需求赋值
target_right_node = get_leftmost_leaf(tree_root)
target_left_node = get_rightmost_leaf(tree_root)

print(f"最右节点: {target_right_node.name}(points: {target_right_node.points})")
print(f"最左节点: {target_left_node.name}(points: {target_left_node.points})")

方法2:筛选所有叶子节点定位

如果需要直接根据节点名称匹配目标,可以先获取所有叶子节点再筛选:

# 获取树中所有叶子节点
all_leaf_nodes = [node for node in tree_root.descendants if node.is_leaf]

# 筛选出目标节点
target_right_node = next(n for n in all_leaf_nodes if n.name == "d")
target_left_node = next(n for n in all_leaf_nodes if n.name == "g")

print(f"最右节点: {target_right_node.name}(points: {target_right_node.points})")
print(f"最左节点: {target_left_node.name}(points: {target_left_node.points})")

两种方法执行后都会输出:

最右节点: d(points: 40)
最左节点: g(points: 20)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:00:21