【发布时间】:2021-08-08 02:44:51
【问题描述】:
我有一个字符串列表
data = ['1', '8TUV', '0', '0', '4GHI', '6MNO', '8TUV', '5JKL', '8TUV', '6MNO', '5JKL']
预期输出图:
1
/ | | \
8 T U V
/ | | \
0 0 0 0
/ | \ \
0 0 0 0
// |\ // |\ // |\ // |\
4 G H I 4 G H I 4 G H I 4 G H I
//// ////||||\\\\
6MNO 6MNO 6MNO 6MNO
Now 4 will have children [6,M,N,O], G will have children [6,M,N,O], H will have children [6,M,N,O], I will have children [6,M,N,O].
结构是这样的, 数据的第一个元素是根。 第二个元素是第一个元素的子元素。如果第二个元素的长度 > 1,比如长度为 'l',那么第一个元素将有 l 个子元素。 l[0] .. l[n] 个子元素将第三个元素作为子元素,依此类推。 叶元素应该像 6MNO (data[9])
6 M N O
|||| |||| |||| ||||
5JKL 5JKL 5JKL 5JKL [Leaf elements, since no element exists after 5JKL in data]
data 列表中的每个“i+1”元素都是“i”元素的子元素。如果 i+1 元素的长度 == 0,则 data 的“i”元素有 1 个子元素,但是,如果“i+1”元素的长度大于 1,则“i”元素子元素的数量将等于 i+1 元素的长度。
这是我的类来表示单个节点的结构。
class Node:
def __init__(self,c='%',children={}):
self.c = c #c => character
self.children = children #
}
Node(character='1',
children: {
8: Node(character:'8',children:{}),
T: Node(character:'T',children:{}),
U: Node(character:'U',children:{}),
V: Node(character:'V',children:{})
})
I want (came up with this structure) a tree structure in this way (expected output)
{
c='1',
children={
'T': {
c = 'T',
children = {
c='0',
children = {
c = '0',
children = {
'G'={},
'H'={},
'I'={}
}
}
}
},
'U': {
c = 'U',
children:{
.
.
}
},
'V': {
c = 'V',
children:{
.
.
}
}
}
}
我知道我需要使用递归和 DFS,但我想不出解决方案。任何真正有用的建议/反馈。
我的逻辑:
root = Node(data[0]) // 1
def dfs(node,data):
if not data or len(data) == 0:
return node.children
for i in range(1,len(data)):
node.children[i-1] = dfs(node,data[i:])
#now current node should be list(node.children.keys())[0] to #list(node.children.keys())[n]
for k,v in node.children.items():
node = node.children[k]
# perform call recursive function again.
dfs(root,data)
【问题讨论】:
-
“但我无法想出解决方案”对于 Stack Overflow 问题是不可接受的 - 您应该努力解决问题,并展示您的尝试以及您的推理走得那么远,并准确指出你卡在哪里。请(重新)阅读How to Ask。
-
请提供完整输入和对应输出(完整)。目前尚不清楚(例如)您如何识别叶子。如上所述,包括您的尝试和对问题所在的描述。我们可以努力回答,但努力必须来自双方。
-
这个图怎么匹配
data?我不明白。data有两个带有“8TUV”的条目,但我在图中只看到一次。data有两次“6MNO”,位图有 4 次。这个数字还有很多零……你能保持一致吗? -
你写了“5JKL Leaf 元素,因为它后面不存在元素”,但是
data是如何确定“它后面不存在元素”的呢? -
嗯,所以我们知道数据是一个字符串列表,['1', '8TUV', '0', '0', '4GHI', '6MNO', '8TUV', ' 5JKL'、'8TUV'、'6MNO'、'5JKL']。从技术上讲,data 中的每个 i+1 元素都是 i 元素的子元素 (0 1 -> 0 -> [A,B,C] [第二个 0 有三个孩子; “A”、“B”、“C”]