Java AVL树查找最近的密钥
查找字符串:X,该字符串可能存在于AVL树中,也可能不存在于AVL树中。如果存在X,我可以使用伪代码来获取X,或者找到X之后的下一个最大字符串吗 我已经为继任者编写了代码。后继节点找到下一个最大的节点Java AVL树查找最近的密钥,java,avl-tree,Java,Avl Tree,查找字符串:X,该字符串可能存在于AVL树中,也可能不存在于AVL树中。如果存在X,我可以使用伪代码来获取X,或者找到X之后的下一个最大字符串吗 我已经为继任者编写了代码。后继节点找到下一个最大的节点 protected BSTVertex successor(BSTVertex T) { if (T.right != null) // this subtree has right subtree return findMin
protected BSTVertex successor(BSTVertex T)
{
if (T.right != null) // this subtree has right subtree
return findMin2(T.right); // the successor is the minimum of right subtree
else {
BSTVertex par = T.parent;
BSTVertex cur = T;
// if par(ent) is not root and cur(rent) is its right children
while ((par != null) && (cur == par.right)) {
cur = par; // continue moving up
par = cur.parent;
}
return par == null ? null : par; // this is the successor of T
}
}
例如,如果树由数字1、2、3、4、7、9组成。如果我想找到6,它应该返回我7,因为6不存在,下一个最大的值是7您需要一个搜索函数的变体,该函数返回最近的节点、下一个最大的节点或检查的最后一个叶节点。如果它是最后一个叶节点,则不一定是最近的。在您的示例中,最后一个叶节点对于6可能是2或9,而不一定是4或7
返回下一个最大值的方法可以如下所示
/* returns the next biggest or null. If it's null, the first is the next biggest
\. */
BSTVertex searchOrNextBiggest(BSTVertex T, int key) {
/* this.nextBiggest is the next biggest so far */
if (T == null) return this.nextBiggest;
else if (T.key == key) return T;
/* is this the next biggest */
if (T.key - key > 0 &&
(this.nextBiggest == null ||
T.key - key < this.nextBiggest.key - key))
this.nextBiggest = T;
if (T.key < key) return searchOrNextBiggest(T.left, key);
else return searchOrNextBiggest(T.right, key);
}
什么是x?你卡在哪里?嗨,我的意思是给定一个字符串,在avl树中查找该字符串,或者如果找不到该字符串,则查找下一个最大的最接近匹配项