Как удалить листья из двоичного дерева, представленного списком списков? - PullRequest
0 голосов
/ 11 мая 2018

У меня есть двоичное дерево, представленное вложенными списками: [[[[], []], [[], []]], [[], [], []]]

ИЯ хочу написать функцию, которая удаляет из него листы (пустые списки) с помощью рекурсии.

Я пробовал с этим, но он даже не запускался.Может ли кто-нибудь помочь мне, как начать?

def removeLeaf(tree):
    for i in tree:
        if type(tree[i]) is list:
            return removeLeaf(tree[i])
        elif tree[i] == []:
            tree.pop(i)
            return removeLeaf(tree)

input:

[[[[], []], [[], []]], [[], [], []]]

вывод:

[[[], []], []]

1 Ответ

0 голосов
/ 11 мая 2018

Вы не должны вызывать resursion в первой части if, потому что вы удаляете пустой список, который является листом.Также предложение должно быть изменено.Вот код:

def removeLeafs(tree):
    for i in range(0,len(tree)-1):
        if len(tree[i]) == 0:
            tree.pop(i)
        else
            removeLeafs(tree[i])
...