Для каждого узла дерева добавьте подчеркивание к каждому узлу, чтобы охватить все дочерние узлы. - PullRequest
0 голосов
/ 04 июля 2019

Я пытаюсь написать функцию, которая принимает дерево и возвращает новое дерево, в котором каждый узел покрывает всех своих дочерних элементов и имеет квадратные скобки вокруг него.

Это моя текущая функция.Мне было трудно отслеживать, что происходит из-за рекурсии, и даже после некоторого времени, проведенного за игрой, определить проблему / проблемы все еще сложно.

 def covered_tree(node):
  parent, children = node
  new_node = None
  for childs in children:
    cover_len = 0
    for each_child in childs:
      covered_tree(childs)
      cover_len += len(each_child)
    cover_len -= len(parent)-2
    parent = '['+parent+'_'*cover_len+']'
    new_node = (parent, children)
  return new_node

Для ввода

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

ожидаемый результат,

('[hello_____]', (('[a]', ()), ('[b______]', (('[cde]', ()), ('[fg]', ())))))

b сопровождается 6 подчеркиваниями, поскольку len ('[cde]' + '[fg]') - 2-len ('a') равно 6,минус два - для внешних скобок.

...