Python — реализация двоичного дерева с использованием рекурсии

#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):])  }