如何在跳表搜索算法中添加代码以打印搜索路径?
跳表搜索路径节点打印的实现方案
要打印跳表搜索时访问过的所有节点,核心是每次访问到新节点时输出该节点信息。结合你的代码,需在以下关键位置添加输出语句:
- 搜索起始节点初始化完成后,输出第一个访问的节点
- 每次
curr节点被更新(向右移动或向下跳层)后,输出当前节点 - 找到目标节点时,在返回前输出该节点(原代码直接return会漏掉)
修改后的完整代码如下:
public SkipListNode<T> search(T key) { SkipListNode<T> prev, curr; int currlevel; for (currlevel = maxLevel; currlevel >= 0 && root[currlevel] == null; currlevel--) ; if (root[0] == null) return null; prev = curr = root[currlevel]; // 输出第一个访问的起始节点 System.out.println("访问节点: " + curr.key); while (true) { if (key.equals(curr.key)) { // 找到目标节点,输出后返回 System.out.println("找到目标节点: " + curr.key); return curr; } else if (key.compareTo(curr.key) < 0) { if (currlevel < 1) return null; else if (curr == root[currlevel]) { curr = root[--currlevel]; // 跳层后输出新节点 System.out.println("访问节点: " + curr.key); } else { curr = prev.next[--currlevel]; // 跳层后输出新节点 System.out.println("访问节点: " + curr.key); } } else if (key.compareTo(curr.key) > 0) { prev = curr; if (curr.next[currlevel] != null) { curr = curr.next[currlevel]; // 向右移动后输出新节点 System.out.println("访问节点: " + curr.key); } else { for (currlevel--; currlevel >= 0 && root[currlevel] == null; currlevel--) ; if (currlevel >= 0) { curr = curr.next[currlevel]; // 跳层后输出新节点 System.out.println("访问节点: " + curr.key); } else return null; } } } }
关键说明:
- 所有
curr变量被重新赋值的位置,都是访问新节点的时机,必须在此添加输出 - 起始节点是搜索的第一个访问点,需要单独输出
- 找到目标节点时,要在return前补充输出,确保路径完整
内容的提问来源于stack exchange,提问作者Coder
相关产品推荐
相关产品推荐

