如何获取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
相关产品推荐
相关产品推荐

