【发布时间】:2015-06-05 10:36:12
【问题描述】:
所以在我的二叉搜索树中,我正在尝试测试我的删除方法,看看它是否从 BST 中删除了一个节点。问题是我的测试一直说它不起作用。 这是我测试删除方法的方式
message = "Test 3: deleting 'word' -- ";
t = new BSTRefBased();
try {
t.delete("word");
result = t.getRootItem().getWord().equals(null);
} catch (Exception e) {
result = false;
}
System.out.println(message + (result ? "passed" : "failed"));
这是我的删除方法:
public void delete(String word) {
root = deleteItem(root, word);
}
protected TreeNode deleteItem(TreeNode r, String word) {
if (r == null){
return r;
}
if(word.compareTo(r.item.getWord()) < 0){
return r;
} else if (word.compareTo(r.item.getWord()) > 0) {
return r;
} else if(r.left != null && r.right != null)
{
return deleteItem(r, word);
} else {
return r;
}
return r;
}
那么为什么它一直说我的删除方法在我的输出中失败了?是我的测试代码有问题还是实际方法有问题?此外,我之前确实在我的 BST 中插入了“单词”这个词,所以它应该在那里。 这是我希望删除方法执行的伪代码版本:
delete(treeNode ,searchitem)
targetNode = search(treeNode ,searchItem)
if targetNode is null
return
P = parent node of target Node
if targetNode has no children
update ref in P that leads to targetNode
return
if targetNode has only one child C update ref in P that leads
to targetNode by overwriting that ref with C
(either left- or right-ref in P)
return
M = targetNode's inorder successor (i.e., left-most in-order
successor in targetNode's right subtree)
m = item in M
copy m into targetNode's item field
delete (treeNode, M)
return
【问题讨论】:
标签: java search methods tree binary-search-tree