import java.io.*;
/**
从数组array=[7 4 1 5 13 8 11 12 15 9 2]搜索数字
首先创建二叉搜索树(比根节点小的数放在左子节点,比根节点大的数放在右子节点),
返回搜索次数
*/
//节点类
class Node{
Node leftChild;
Node rightChild;
int value;
public Node(int value){
this.value = value;
this.leftChild = null;
this.rightChild = null;
}
}
//构造二叉搜索树
class BinaryTree{
public Node rootNode;
private int count = 1;
public void addBinaryTree(int value){
//根节点
if(rootNode == null){
rootNode = new Node(value);
return;
}
Node currentNode = rootNode;
while(true){
if(value < currentNode.value){//左节点
if(currentNode.leftChild == null){
currentNode.leftChild = new Node(value);
return;
}else{
currentNode = currentNode.leftChild;
}
}else{//右节点
if(currentNode.rightChild == null){
currentNode.rightChild = new Node(value);
return;
}else{
currentNode = currentNode.rightChild;
}
}
}
}
public boolean findNode(Node node, int value){
if(node == null){
return false;
}else if(value == node.value){
System.out.println("共搜索"+ count + "次");
return true;
}else if(value < node.value){
count+=1;
return findNode(node.leftChild, value);
}else{
count+=1;
return findNode(node.rightChild, value);
}
}
}
public class BinarySearch{
public static void main(String[] args) throws IOException{
try{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] array = {7, 4, 1, 5, 13, 8, 11, 12, 15, 9, 2};
System.out.print("请输入搜索值:");
int value = Integer.parseInt(br.readLine());
BinaryTree bt = new BinaryTree();
for(int i = 0; i < array.length; ++i){
bt.addBinaryTree(array[i]);
}
bt.findNode(bt.rootNode, value);
}catch(IOException e){
e.printStackTrace();
}
}
}
二分树:每一个节点的数据大于左子节点且小于右子节点。
二分树便于排序和搜索,二叉排序树和二叉搜索树都是二分树的一种。