3622
правки
Изменения
Нет описания правки
<code style = "display: inline-block;">
// prefixes {{---}} HashMap всех префиксов бора
// узлы списка и дерева будем хранить одним типом: узлом с ссылками на правый и левый элементы, а содержимым {{---}} целым числом // только в списке будет храниться само число, а боре 1, если вершина {{---}} лист, и 0 в остальных случаях '''insert'''(x): '''if''' x '''in''' prefixes.contains(x): // ''x'' содержится в боре '''return''' // тогда не добавляем его Node ''left'' = pred(x), ''right'' = succ(x), ''nodex'' node = new Node(x) insert ''nodex'' node между ''left'' и ''right'' в двусвязном списке листьев // передаём ссылку на элемент в списке, чтобы сделать на него быструю ссылку в случае отсуствия одного из сыновей root = insertNode(root, w, ''nodexnode)
prefixes.addAll(allPrefixes(x))
'''insertNode'''(vertex, depth, xnode): '''if''' ''vertex'' == <tex> \varnothing </tex>: ''vertex'' = new Node(left = <tex>\varnothing</tex>, right = <tex>\varnothing</tex>, terminal = depth == 0) '''if''' ''depth'' == 0: '''return''' ''vertex'' '''if''' depthBitbit(xnode.value, depth) == 0: // depth-й бит, т. е. соответствующий текущей глубине vertex.left = insertNode(vertex.left, depth - 1, xnode) '''else''': vertex.right = insertNode(vertex.right, depth - 1, xnode) '''if''' vertex.left == <tex> \varnothing </tex>:
vertex.mark = ''HASNOLEFTSON''
vertex.left = ''x''node '''else if''' vertex.right == <tex> \varnothing </tex>:
vertex.mark = ''HASNORIGHTSON''
vertex.right = node ''x'else''' vertex.mark = ''HASALLSONS''
</code>