gpt4 book ai didi

java - 伸展树(Splay Tree)搜索实现

转载 作者:行者123 更新时间:2023-12-02 00:11:07 32 4
gpt4 key购买 nike

我一直在尝试学习一些数据结构的细节,并且我正在尝试让二叉伸展树(Splay Tree)正常工作。每次我运行以下代码并且我正在寻找的节点超过根的节点时,它都会告诉我它在那里,然后只删除从根向下的整个一侧。如果节点仅从顶部向下一级,则效果很好。

我不确定出了什么问题,但我想这与我的旋转功能有关。我让它能够正常工作的插入功能,这是我建模的基础。

public class SplayBST {
Node root;
int count;
int level = 0;
boolean found = false;
public SplayBST() {
root = null;
count = 0;
}

public String searchIt(String x) {
//after finishing search method I need to check if splaySearch exists then don't insert just splay it
splaySearch(root, x);
if (this.found == true) {
this.found = false;
return x;
}
else {
return null;
}
}


Node splaySearch(Node h, String x) {
if (h == null) {
return null;
}
if (x.compareTo(h.value) < 0) {
try {
if (x.compareTo(h.left.value) < 0) {
h.left.left = splaySearch(h.left.left, x);
h = rotateRight(h);
} else if (x.compareTo(h.left.value) > 0) {
h.left.right = splaySearch(h.left.right, x);
h.left = rotateLeft(h.left);
}
else {
this.found = true;
return h.left;
}
return rotateRight(h);
}
catch (NullPointerException ex) {
return null;
}
}

else { //basically x.compareTo(h.value)>0
try {
if (x.compareTo(h.right.value) > 0) {
h.right.right = splaySearch(h.right.right, x);
h = rotateLeft(h);
} else if (x.compareTo(h.right.value) < 0) {
h.right.left = splaySearch(h.right.left, x);
h.right = rotateRight(h.right);
}
else {
this.found = true;
return h.right;
}
return rotateLeft(h);
}
catch (NullPointerException ex) {
return null;
}
}
}


Node rotateLeft(Node h) {
Node x = h.right;
h.right = x.left;
x.left = h;
return x;
}
Node rotateRight(Node h) {
Node x = h.left;
h.left = x.right;
x.right = h;
return x;
}


class Node {
Node left;
Node right;
String value;
int pos;
public Node(String x) {
left = null;
right = null;
value = x;
}
}
}

最佳答案

我赞同 Tristan Hull 的方法,即使用“有效”搜索方法创建常规 BST。一旦你开始工作,添加 splay 方法就相当简单了。当我实现 Splay Tree in Java 时,我实际上做了同样的事情。这是更好的软件设计和更简单的实现。

关于java - 伸展树(Splay Tree)搜索实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12790365/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com