Измените двоичное дерево, заменив каждый узел произведением всех оставшихся узлов.
Опубликовано: 22 Сентября, 2022
Для заданного двоичного дерева, состоящего из N узлов, задача состоит в том, чтобы заменить каждый узел дерева произведением всех оставшихся узлов.
Примеры:
Input:
1
/
2 3
/
4 5
Output:
120
/
60 40
/
30 24Input:
2
/
2 3
Output:
6
/
6 4
Подход: Данную проблему можно решить, сначала вычислив произведение всех узлов в заданном дереве, а затем выполнив любой обход дерева в заданном дереве и обновив каждый узел значением (P/(root->values) . Следуйте шаги ниже, чтобы решить проблему:
- Найдите произведение всех узлов бинарного дерева с помощью Preorder Traversa и сохраните его в переменной, скажем, P .
- Определите функцию, скажем, updateTree(root, P) и выполните следующие шаги:
- Если значение root равно NULL , то возврат из функции.
- Обновите текущее значение корневого узла до значения (P/root->value) .
- Рекурсивно вызывать левое и правое поддеревья как updateTree(root->left, P) и updateTree(root->right, P) .
- После выполнения вышеуказанных шагов распечатайте Inorder Traversalизмененного дерева.
Ниже приведена реализация вышеуказанного подхода:
Временная сложность: O(N)
Вспомогательное пространство: O(N)