Это можно сделать, если значения в дереве являются аддитивными к его родительскому элементу. Возьми это дерево из Википедии
Таким образом, 13 является родителем, 17 тогда будет 17-13 = 4, 15 будет 15-17 = -1. Это означает, что когда вам нужно реальное значение, вам нужно сложить родительские узлы, поэтому, чтобы получить 15, вы берете 13 -> 4 -> -2 13 + 4-2 = 15.
Таким образом, вы можете изменить узлы, которые больше, чем x, в log n раз.
Если мы хотим изменить все больше 23 с +4, мы опустимся до 17, затем до 25, что> 23, и добавим 4 к его относительному значению, которое было 25-17 = 8, и увеличим его до 12, теперь все его дочерние элементы больше на 4, затем мы переходим к 22, которое меньше, поэтому мы вычитаем 4 из его относительного значения -3, которое затем получает -7, и когда мы достигаем кнопки, все готово. Итак, каково значение узла, который изначально был 27, его 13 + 4 + (8 + 4) + 2 = 31.
Но я бы не хотел писать код для восстановления баланса дерева при добавлении или удалении узла.