如何在lisp中使用父指针和子指针制作splay树

时间:2014-12-28 16:41:20

标签: recursion lisp common-lisp binary-tree binary-search-tree

我将此节点结构定义为

(defstruct node 
  parent
  left
  right
  data)

当我填写父节点时,有没有办法以这样的方式来避免计算父节点时的无限递归?

例如:假设我有一个节点(A :parent B :left 2 :right 3 :data nil)和一个节点(B :parent nil :left 4 :right A :data nil)。当您评估A的父级时,您将获得无限递归(A的父级是B - > B' s右侧是A - > A的父级是B - > ...)。有没有办法避免这种情况,同时保持所有splay树操作的mlg(n)性能?

我很感激

1 个答案:

答案 0 :(得分:3)

无限递归可能是打印的一部分。你可以通过以下方式避免这种情况:

  • 不打印圆形结构
  • 在标准打印机中启用圆圈检测:(setf *print-circle* t)