首页 > 解决方案 > 返回一个修改过的树,每个节点都添加了括号

问题描述

我有一个遍历树中每个节点的函数,我正在尝试创建一个修改过的树,每个节点都添加了括号。

由于元组是不可变的,我知道我不能通过索引选择节点并以这种方式添加括号,所以我一直在尝试如何将树重建回其原始状态,每个节点周围都有括号。

def add_brackets(node):
  parent, children = node
  for child in children:
    add_brackets(child)

为了,

("hello", (("a", ()), ("b", (("cde", ()), ("fg", ())))))

我想回来,

('[hello]', (('[a]', ()), ('[b]', (('[cde]', ()), ('[fg]', ())))))

我怎样才能做到这一点?

标签: pythonrecursiondata-structurestreetuples

解决方案


是的,元组是不可变的,你需要构造新的并返回它们。

尝试这个:

def add_brackets(node):
    parent, children = node
    new_parent = "[{}]".format(parent)
    new_children = tuple(add_brackets(child) for child in children)
    return (new_parent, new_children)


root = ("hello", (("a", ()), ("b", (("cde", ()), ("fg", ())))))
root = add_brackets(root)
print(root)

输出:

('[hello]', (('[a]', ()), ('[b]', (('[cde]', ()), ('[fg]', ())))))

推荐阅读