我正在使用 Erlang 中的二叉树实现。这是代码片段,可以让您了解一下:
-record(node, {key, value, left, right}).
% ...
insert(Tree, {Key, Value}) when Key == Tree#node.key ->
#node{key=Key,
value=Value,
left=Tree#node.left,
right=Tree#node.right};
insert(Tree, {Key, Value}) when Key > Tree#node.key ->
Tree#node{right=insert(
Tree#node.right, {Key, Value})};
% ...
在这里,当我向树中插入一个新的键和值时,我返回一个带有插入(或修改)节点的新树。
问题: VM 会实际复制树并 GC 旧的(效率低下),还是复制对旧分支的引用并仅更改受新密钥影响的节点/分支?
有关的: