让我们假设我们有一棵树的不利表示.此树不是嵌套的,而是扁平化的,其 node 仅通过ID"连接":
{
"nodes":[
{
"id":0,
"value":"and",
"children":[
1,
4
]
}
{
"id":1,
"value":"or",
"children":[
2,
3
]
},
{
"id":4,
"value":"or",
"children":[
5,
6
]
}
],
"leafs":[
{
"id":2,
"value":"some statement"
},
{
"id":3,
"value":"some statement"
},
{
"id":5,
"value":"some statement"
},
{
"id":6,
"value":"some statement"
}
]
}
您可以看到,树不仅是扁平的,还有一个相当不必要的表示作为专用列表的树叶. 因此,叶的ID出现两次:一次作为其父 node 中的子 node ,一次作为叶的标识符.
我想要的是该树的嵌套表示形式,即专用的python对象.我必须用整个对象替换"id",并go 掉过于复杂的列表表示.
这就是我想要的:
{
"tree": {
"id": 0,
"value": "and",
"children": [
{
"id": 1,
"value": "or",
"children": [
{
"id": 2,
"value": "some statement"
},
{
"id": 3,
"value": "some statement"
}
]
},
{
"id": 4,
"value": "or",
"children": [
{
"id": 6,
"value": "some statement"
},
{
"id": 6,
"value": "some statement"
}
]
}
]
}
}
我应该如何开始解析这两个列表,以便构建相互引用并仅通过引用表示该树 struct 的Python对象( node 和叶类).
class Node:
def __init__(self, id, operator):
self.id = id
self.value= operator
self.children = None
class Leaf:
def __init__(self, id, operator):
self.id = id
self.value = None
这些是我的树类,但我不知道如何遍历这两个列表,以一种将我带到所需树的方式.