splay tree是一种自调整二叉搜索树。将节点插入到splay树中涉及将其作为叶子插入二叉搜索树中,然后通过" splay"将该节点上传到根节点。操作
让我们说二元搜索树是" splay-constructible"如果可以通过以某种顺序将其元素插入到最初为空的展开树中来生成树。
并非所有二叉搜索树都是可展开的。例如,以下是最小的非展开可构造二进制搜索树:
在给定二叉搜索树的情况下,什么是一种有效的算法,确定它是否是可展开的?
这个问题的灵感来自related question关于AVL和splay树之间的一致性。
更多细节:我有代码从给定序列生成一个splay树,所以我可以在O(n!log(n))时间左右执行暴力测试,但是我怀疑使用树结构上的某种形式的动态编程可以实现多项式时间性能。据推测,这样的算法可以利用这样一个事实,即每个大小为 n 的splay-constructible树都可以通过将当前根插入到一些大小为 n-1 的可展开构造树中来生成。 ,然后做一些事情来利用重叠/同构的子问题。