Добавьте n дочерних элементов к любой ветви, длина которой меньше высоты дерева - PullRequest
0 голосов
/ 08 июля 2019

Часть проблемы включает добавление узла к любому листу, длина которого меньше высоты дерева. Новый узел должен состоять из дочернего элемента, где метка представляет собой строку периодов, а дочерние элементы - пустой кортеж. Длина периодов должна быть равна длине родительского элемента плюс 2 для учета скобок.

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

def tree_height(node): 
    parent, children = node
    max_height = 0
    for child in children:
      child_height = tree_height(child)
      max_height = max(max_height, child_height +  1)
    return max_height

def cover_tree(node, level=0):
  level = tree_height(node)
  parent, children = node
  new_children = tuple(cover_tree(child) for child in children)
  cover_len = 0
  for childs in new_children:
    cover_len += len(childs[0])
  cover_len  = cover_len -(len(parent))-2
  new_parent = "[{}]".format(parent+'_'*cover_len)
  return (new_parent, new_children)

Для дерева

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

текущее дерево возврата,

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

но я хочу вернуться,

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

Другой пример:

("supercalifragilisticexpialidocious",(("a",(("b",(("candy",()),)),("onomatopoeia",()),)),("d",(("egg",(("f",()),)),)),))

хочу вернуться,

('[supercalifragilisticexpialidocious]', (('[a__________________]', (('[b____]', (('[candy]', ()),)), ('[onomatopoeia]', (('..............', ()),)))), ('[d__]', (('[egg]', (('[f]', ()),)),))))

Как это можно сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...