В качестве ключа используется значение узла, а значение - список из двух поддеревьев: левого и правого.
Каждое поддерево, в свою очередь, оформляется в таком же виде - словарь, где ключом является значение узла, а значением список его потомков.
- Если высота дерева равна 0, возвращается пустой словарь `{}`
- Если высота дерева равна 1, создаётся лист `{value: []}`.
- Для вычисления значений потомков используются заданные правила:
Функция принимает аргументы left_func и right_func. Это позволяет передавать любые правила вычисления потомков (например, через lambda), не меняя основной код функции.
- Если высота дерева меньше 0, возвращается пустой словарь `{}`, дерево не существует
- Если высота дерева равна 0, возвращается корень с пустым листом `{value: []}`
- Если высота дерева равна 1, функция рекурсивно строит левое и правое поддеревья, уменьшая высоту на 1 на каждом шаге
- Для вычисления значений потомков по умолчанию используются заданные правила:
левый потомок вычисляется как `2 * root + 1`, правый - `2 * root - 1`.
Рекурсивные вызовы функции выполняются до достижения заданной высоты дерева.
...
...
@@ -42,7 +45,9 @@ func.py:
```python
'''Мой номер п/п в подгруппе - 9'''
defgen_bin_tree(height:int=6,root:int=9)->dict:
defgen_bin_tree(height:int=6,root:int=9,
left_func=lambdar:2*r+1,
right_func=lambdar:2*r-1)->dict:
"""
Строит дерево в виде словаря {root: [left_subtree, right_subtree]},
лист дерева представлен как {value: []}.
...
...
@@ -52,28 +57,33 @@ def gen_bin_tree(height: int = 6, root: int = 9) -> dict:
height - высота дерева, тип int (по умолчанию 6),
root - значение корня дерева, тип int (по умолчанию 9).
"""
ifheight<=0:
ifheight<0:
'''Нет узла — пустое дерево'''
return{}
ifheight==1:
ifheight==0:
'''Лист'''
return{root:[]}
left=2*root+1
right=2*root-1
left_val=left_func(root)
right_val=right_func(root)
'''Рекурсивный вызов для левого и правого поддеревьев