python递归有没有分支语句_在python中递归定义多分支嵌套树

我试图用Python实现一些基本的递归结构,但是没有成功。我有一个以嵌套列表形式表示的树,如下所示:ex = ['A',

['A1',

['A11', 'tag'],

['A12', 'tag'],

['A13',

['A131', 'tag'],

['A132',

['A1321', 'tag'],

['A1322', 'tag']]]],

['A2', 'tag'],

['A3',

['A31',

['A311', 'tag'],

['A312', 'tag']],

['A32', 'tag'],

['A33',

['A331',

['A3311', 'tag'],

['A3312', 'tag']]],

['A34', 'tag'],

['A35',

['A351', 'tag'],

['A352',

['A3521', 'tag'],

['A3522', 'tag']]]],

['A4', 'tag']]

我还定义了一个节点类,它允许指定一个标记'A', 'A1', ...并添加子项。可以通过注意children不是一个列表来检索终端节点。在

^{pr2}$

现在,我在实现将基于列表的树递归地转换为基于节点的树的函数时遇到了困难:tree = Node(tag='A',

children=[Node(tag='A1',

children=[Node(tag='A11',

children='tag'),

Node(tag='A12',

children='tag'),

...]),

...])

到目前为止,我的尝试是基于这样一种想法:在嵌套列表的每个位置,我们可能有一个终端节点,在这种情况下,我们只需将它添加到根节点,或者是一个非终端节点,在这种情况下,我们提取相应的根标记并递归地在子节点上迭代。当列表为空时,我们将控制权返回给调用方。

我的感觉是编码风格可能不是最适合Python的,但是我想更具体地知道我缺少什么。在def is_terminal(e):

return len(e) == 2 and type(e[0]) == str and type(e[1]) == str

def from_list(lst, root):

lst = list(lst) # avoid mutating input list

if not lst:

return

for e in lst:

if is_terminal(e):

tag, children = e

print "terminal", tag, "with root", root.tag

root.add_child(Node(tag=tag, children=children, parent=root))

else:

e = list(e)

tag, children = e.pop(0), e

print "non terminal", tag, "with root", root.tag

root = Node(tag=tag, parent=root)

from_list(children, root=root)

它有很多问题。例如,它失去了对最高根'A'的跟踪,即A2得到{}作为根。它还将树展平到一个有16个子节点的节点,每个终端节点一个子节点,并进入无限递归。

我希望你能给我任何提示。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值