Итак, мне нужно написать функцию вставки для двоичного дерева, чтобы сделать его двоичным деревом поиска, но у меня возникли некоторые проблемы. Все функции, поэтому я понимаю, что понятия состояния нет. Поэтому мне нужно рекурсивно создавать дерево снова и снова при вставке. У меня проблемы с обдумыванием этой идеи.
treenode -> procedure(val, left, right) procedure(some) if some then -(some, 1) then right else left else val
Это позволяет мне создавать узлы и получать доступ к значению, левому поддереву и правому поддереву, например (0 означает пустое дерево):
.treenode(4, 0, 0)
чтобы создать более сложное дерево, я могу сделать:
.treenode(4, .treenode(3, 0, 0), .treenode(6, .treenode(2, 0, 0), 0))
Я дошел до вставки в пустое дерево:
insert -> procedure(root, value) if empty(root) then .treenode(value, 0, 0) else insert_recursive(root, .treenode(value, 0, 0)
Здесь я не могу понять, как вставить в такое дерево. В этом языке нет концепции состояния, поэтому мне нужно каким-то образом рекурсивно добавить новый узел со значением в текущее дерево. Если кто-то может дать мне подсказку, я был бы очень признателен. Как я должен называть это:
tree = empty
tree = insert(tree, 4)
tree = insert(tree, 6)
....
and so on