Python大树最左边和最右边的叶子

问题描述 投票:0回答:1

我试图在大树节点中找到最左边的叶子和最右边的叶子,这是我的代码

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)


对于下面的输出,我需要将“d”作为最右边的节点,将“g”作为最左边的节点

a
├── b
│   ├── d
│   └── e
└── c
    ├── f
    └── g
python json tree
1个回答
0
投票

您可以使用

bigtree.utils
模块中的迭代方法:

from bigtree import utils

# The left most leaf is the first node in a post-order traversal
first = next(utils.iterators.postorder_iter(tree_root))

# The right most leaf is the last node in a pre-order traversal
last = None
for last in utils.iterators.preorder_iter(tree_root):
    pass

# Results:
print(first)
print(last)

请注意,您将左右混淆了。树是这样的:

          _a_
         /   \
        b     c
       / \   / \
      d   e f   g

所以“d”是最左边的叶子,“g”是最右边的叶子。 (另请参阅初始字典中的“侧键”)。

© www.soinside.com 2019 - 2024. All rights reserved.