我正在尝试实现一个递归的splay树,自下而上。我递归到我需要展开的节点,然后找到该节点的父节点和祖父节点。然后我可以根据情况正好zig zag或zig zig。问题是在完成此操作后,我将已经显示一次的节点返回到先前的递归调用。先前的递归调用被引用到节点的父节点,该节点现在是该节点的子节点。当我上去的时候,我如何递归推广节点?
答案 0 :(得分:1)
如果我没记错的话,你可以在向下递归到目标节点时构建一个左右树。当您找到目标时,使用目标的(原始)子项构造最终的左侧和右侧树,将生成的树作为目标的新子项附加,并以尾递归的方式返回结果(即,所有无需进一步修改即可备份堆栈。)
答案 1 :(得分:0)
当树完全“不平衡”并且非常大(例如100000 int键)时,递归算法可能会抛出stackoverflow异常。最好在每个节点中使用父指针来获取父节点或父节点。这是一种方法。对我来说很好。
运行时的结果显而易见splay tree runtime profiling