我有以下代码在BST中搜索节点:
private Node<AnyType> searchAndGetNode(AnyType value) {
Node<AnyType> currentNode = root;
while(currentNode != null && currentNode.getData() != null) {
if (value.compareTo(currentNode.getData()) == 0) {
return currentNode;
} else if (value.compareTo(currentNode.getData()) < 0) {
currentNode = currentNode.getLeft();
} else {
currentNode = currentNode.getRight();
}
}
return null;
}
我知道Optional.ofNullable()获取Optional对象,然后使用isPresent()避免进行空检查。但是我想不出任何巧妙的方法来避免在上述方法的while循环中进行空检查比较。我正在使用Java8。请提出建议。
最佳答案
您应该删除条件的&& currentNode.getData() != null
部分,因为在二叉树中没有null值是没有意义的(您不能在null上调用compareTo
,因此您要将它插入树中的什么位置?)。除此之外,您拥有的空检查没有任何问题。
但是,为了提高性能,您不应为每个值两次调用compareTo
,而应调用一次并检查结果:
int cmp = value.compareTo(currentNode.getData());
if (cmp == 0) {
return currentNode;
} else if (cmp < 0) {
currentNode = currentNode.getLeft();
} else { // cmp > 0
currentNode = currentNode.getRight();
}