#python #recursion #binary-tree
Вопрос:
def build_bst(l): if len(l) == 1: return l mid = len(l) // 2 return bst = {'data': l[mid]}, bst["left_child"] == {'data': build_bst(l[:mid])}, bst["right_child"] == {'data': build_bst(l[(mid 1):])} sorted_list = [12, 13, 14, 15, 16] binary_search_tree = build_bst(sorted_list) print(binary_search_tree) Error: File "recursion.py", line 6 return bst = {'data': l[mid]}, bst["left_child"] == {'data': build_bst(l[:mid])}, bst["right_child"] == {'data': build_bst(l[(mid 1):])} ^ SyntaxError: invalid syntax
Может кто-нибудь объяснить, что не так с моим кодом, я, кажется, не могу найти ошибку.
Комментарии:
1. В чем заключается вопрос?
2. вопрос в том, чтобы принять отсортированный список в качестве аргумента для функции, которая создает двоичное дерево с использованием рекурсии
Ответ №1:
Основными вопросами являются:
- Вы не можете использовать
=
в операторе возврата-вот о чем сообщение об ошибке; Сначала вы должны выполнить назначения в отдельных операторах, а затем выполнитьreturn
. Или используйте один литерал словаря без какого-либо присвоения переменной. - Базовый регистр возвращает массив, но вы ожидаете, что в качестве возвращаемого значения будет BST (словарь). На самом деле базовый вариант должен быть, когда длина списка равна нулю
- Возвращаемое значение рекурсивного вызова назначается атрибуту данных, но атрибут данных должен получать только целочисленное значение, а не BST (словарь)
Вот исправленная версия:
def build_bst(l): if not l: return None mid = len(l) // 2 return { "data": l[mid], "left_child": build_bst(l[:mid]), "right_child": build_bst(l[(mid 1):]) }