我讀教程OCaml的賈森·希基,這裏是在短構建樹的建議方式:ocaml的 - 建立二叉樹
type 'a elem = Empty | Node of 'a * 'a elem * 'a elem;;
let rec insert x = function
| Empty -> Node (x, Empty, Empty)
| Node (y, left, right) as node ->
if x < y then
Node (y, insert x left, right)
else if x > y then
Node (y, left, insert x right)
else
node;;
難道我理解正確的話,這種做法使的副本插入新元素的樹的一部分,並將舊樹的一部分附加到此新副本中?
如果是這樣,我的評估是,每個插入僅創建O(height(tree))
節點?
這樣做(對我來說有點不尋常)是否依賴於這樣的事實:如果逐個插入多個值,那麼所有較舊的節點組副本將被GC有效刪除?