接上一篇,插入功能做了之后我们就可以去做查询功能了,废话不多说先上代码
/**
* 在此树中查询某个元素
* @param element
* 元素存在返回true,不存在返回false
* @return true if exist, false otherwise
*/
@Override
public boolean query(T element) {
//如果是根节点为空,就证明是一个空树
if( null == rootNode ){
System.out.println("An empty tree!");
return false;
}//end if
return query(rootNode,element);
}
/**
* 以指定节点为根节点的树下面查询某个元素
* @param node element
* 元素存在返回true,不存在返回false
* @return true if exist, false otherwise
*/
private boolean query(Node<T> node,T element) {
//非空保护
if( null == node ){
return false;
}//end if
/**
* 要查询的数和节点进行比较
*
* 提醒一下 comparator.compare(A,B)
* 如果A>B 返回positive number
* 如果A<B 返回negative number
* 如果A=B 返回0
*/
int flag = comparator.compare(node.getData(),element);
if( flag == 0 ){
//如果被查询的数等于这个节点,哈哈那就找到啦
System.out.println(element.toString()+" is exist in this tree.");
return true;
}else if( flag > 0 ) {
//如果被查得数小于当前节点,就要再去查该节点的左子树
if( null == node.getLeft()){
//如果没有左子树,那肯定就失败啦...
System.out.println(element.toString()+" isn't exist in this tree.");
return false;
}else{
return query(node.getLeft(),element);
}
}else{
//如果被查得数大于当前节点,就要再去查该节点的右子树
if( null == node.getRight()){
//如果没有右子树,那肯定就失败啦...
System.out.println(element.toString()+" isn't exist in this tree.");
return false;
}else{
return query(node.getRight(),element);
}
}
}
Main函数入口
public static void main( String []args ) {
Btree<Integer> btree = new BStree<Integer>(new MyComparator());
btree.insert(5);
btree.insert(1);
btree.insert(2);
btree.insert(3);
btree.insert(4);
btree.insert(6);
btree.insert(7);
// ((BStree)btree).printfAll();
btree.query(11);
btree.query(3);
}
结果
11 isn't exist in this tree.
3 is exist in this tree.
Process finished with exit code 0