Я понимаю, как обычно деревья используются для изменения постоянных структур данных (создания нового узла и замены всех его предков).
Но что, если у меня есть дерево из 10 000 узлов, и мне нужноизменить 1000 из них?Я не хочу проходить и создавать тысячи новых корней, мне нужен только один новый корень, который получается в результате изменения всего сразу.
Например: Давайте возьмем, например, постоянное двоичное дерево.В случае одного узла обновления он выполняет поиск до тех пор, пока не найдет узел, не создаст новый с изменениями и старыми дочерними элементами и не создаст новых предков вплоть до корня.
В случае массового обновления можетмы делаем: вместо того, чтобы просто обновить один узел, вы собираетесь обновить 1000 узлов на нем за один проход.
В корневом узле текущий список является полным списком.Затем вы разделяете этот список между теми, которые соответствуют левому узлу, и теми, которые соответствуют правому.Если ни один из них не подходит ни одному из детей, не спускайтесь к нему.Затем вы спускаетесь к левому узлу (при условии совпадения), разделяете его список поиска между его дочерними узлами и продолжаете.Когда у вас есть один узел и совпадение, вы обновляете его и возвращаетесь обратно, заменяя и обновляя предков и другие ветви в зависимости от ситуации.
Это приведет к появлению только одного нового корня, даже если будет изменено любое количество узлов.