如何在插入BST时避免复制/创建新节点

时间:2013-10-28 17:02:38

标签: functional-programming ocaml binary-search-tree sml

现在让我们忽略BST的平衡部分。

type 'a bst = 
  | Leaf
  | Node of 'a bst * 'a * 'a bst

典型的insert将如下所示:

let rec insert x = function
  | Leaf -> Node (Leaf, x, Leaf)
  | Node (l, k, r) as n ->
    if x = k then n
    else if x < k then Node (insert x l, k, r)
    else Node (l, k, insert x r)

毫无疑问,函数insertcreate new nodes / make a copy of nodes沿着搜索路径。

所以我的问题是有没有办法避免这种复制?

此问题来自本书Purely Functional Data StructuresExercise 2.3

  

练习2.3将现有eleemtn插入二叉搜索树   即使复制的节点是,也复制整个搜索路径   与原件无法区分。使用异常重写插入   避免这种复制。每次插入只建立一个处理程序   每次迭代不止一个处理程序。

我实际上并不遵循这个练习。

  1. “使用例外来避免这种复制”是什么意思?
  2. 为什么要使用“例外”?
  3. 什么意思是“每次插入一个处理程序”?

1 个答案:

答案 0 :(得分:1)

请注意,只有在插入已经存在的元素时才能避免复制!不应该太难看出如何做到这一点。