Вопрос:

Вам дан узел root бинарного дерева поиска (BST) и узел value для вставки в дерево. Вернуть корневой узел BST после вставки. Гарантируется, что новое значение не существует в исходном BST.

Обратите внимание, что может существовать несколько допустимых способов вставки, если после вставки дерево остается BST. Вы можете вернуть любой из них.

Пример 1:

Input: root = [4,2,7,1,3], val = 5
Output: [4,2,7,1,3,5]
Explanation: Another accepted tree is:

Решение:

В данной задаче нам нужно вставить значение val в двоичное дерево поиска.

В двоичном дереве поиска мы знаем, что левое поддерево меньше корня, а правое поддерево больше корня.

Итак, для вставки мы будем сравнивать val с корнем и, соответственно, вставлять его в дерево.

Во-первых, мы создадим новый узел для возврата значения.

TreeNode* node = new TreeNode(val);

Теперь нам нужно проверить, является ли корневойузел нулевым или нет. Если да, то верните новый узел, который мы создали на предыдущем шаге.

if(root == NULL)
    return node;

Следующим шагом является сравнение val с корневым узлом. Если val меньше root, вставьте его в левое поддерево, а если val больше root, то он будет вставлен в правое поддерево.

if(root -> val > val) 
    root->left = insertIntoBST(root -> left, val);
else 
    root -> right = insertIntoBST(root -> right, val);

Наконец, будет возвращен корень.

return root;

Ниже приведен полный код проблемы:

Спасибо за прочтение!

S.