【发布时间】:2022-09-27 21:38:32
【问题描述】:
我正在努力以视觉方式从 Mtree 打印数据,更具体地说是这个 mtree https://github.com/tburette/mtree
我在这里有一个距离函数:
def d_int(x, y):
return abs(x - y)
我在这里创建并填充 MTree
p_tree = mtree.MTree(d_int, max_node_size=2)
p_tree.add_all([1,2,6,5,0,24,19,11,80,31,32,3,4,16,71,89,9,10])
p_tree.__dict__ 看起来像这样:
一个根有两个条目(存储在一个集合中),但没有第一个节点。然后这两个条目中的每一个都包含子树,依此类推
{\'d\': <function _main_.d_int(x, y)>,
(... left out data ...)
\'size\': 18,
\'root\': InternalNode(parent_node: None, parent_entry: None,
entries:[
Entry(obj: 24, dist: None, radius: 65, subtree: \'InternalNode()\'),
Entry(obj: 1, dist: None, radius: 10, subtree: \'InternalNode()\')
])}
我一直试图通过像这样递归循环子树来打印树,但我最终得到了一个对我没有意义的打印。
def printTree(root, level=0):
print(\" \" * level, root.obj)
if(root.subtree == None): return root.obj
for child in root.subtree.entries:
printTree(child, level + 1)
printTree(p_tree.root.entries.pop()) //pop() because entries is a set
返回
0
11
11
11
11
11
11
10
10
0
3
3
3
4
4
3
3
6
6
6
6
5
5
9
9
9
0
0
1
1
1
2
2
0
0
0
我也不想为了打印它而破坏我的树(pop()),但是当根节点不是它自己的节点时,我看不到其他方法。
** 所以我的问题: 如何打印 Mtree? (更具体地说是https://github.com/tburette/mtree) 以及如何在没有顶部节点的情况下递归打印树? **
-
关于
pop:How to retrieve an element from a set without removing it?。一种方法是printTree(next(iter(p_tree.root.entries))) -
您是否直接尝试过
print(p_tree.root)? -
print(p_tree.root)将dict关系中的信息返回给root,即:`\'root\': InternalNode(parent_node: None, parent_entry: None, entries:[Entry(obj: 24, dist: None, radius: 65, subtree : \'InternalNode()\'), Entry(obj: 1, dist: None, radius: 10, subtree: \'InternalNode()\')])} ` -
@Stef
printTree(next(iter(p_tree.root.entries)))- 太棒了!谢谢,这就是我一半麻烦的答案! -
好的,
def tree_as_tuple(root): return (root.obj, tuple(map(tree_as_tuple, root.subtree.entries)))怎么样;然后你用print(tree_as_tuple(p_tree.root))打印
标签: python loops recursion printing