二叉搜索树可以算是基于二叉排序树的,差别在于其中有个查找(其实也就是递归遍历),所以可以说跟二叉排序是基本一致的。
上代码:
class TreeNode {
int value;
TreeNode left_node;
TreeNode right_node;
public TreeNode(int value) {
this.value = value;
this.left_node = null;
this.right_node = null;
}
}
public class BinarySearchTree {
public TreeNode rootNode;
public static int count = 1;
public void Add_Node_To_Tree(int value) {
if(rootNode == null) {
rootNode = new TreeNode(value);
return;
}
TreeNode currentNode = rootNode;
while (true) {
if(value < currentNode.value) {
if(currentNode.left_node == null) {
currentNode.left_node = new TreeNode(value);
return;
}
else {
currentNode = currentNode.left_node;
}
}
else {
if(currentNode.right_node == null) {
currentNode.right_node = new TreeNode(value);
return;
}
else {
currentNode = currentNode.right_node;
}
}
}
}
public boolean findTree(TreeNode node, int value) {
if(node == null) {
return false;
}
else if(node.value == value) {
System.out.println("共搜索" + count + "次");
return true;
}
else if(value < node.value) {
count+=1;
return findTree(node.left_node, value);
}
else {
count+=1;
return findTree(node.right_node, value);
}
}
public static void main(String[] args) throws IOException {
int i, value;
BinarySearchTree tree = new BinarySearchTree();
int arr[] = {7, 4, 1, 5, 13, 8, 11, 12, 15, 9, 2};
System.out.println("原型数组内容:");
for(i=0;i<11;i++) {
System.out.print("[" + arr[i] + "]");
}
System.out.println();
for (i=0;i<11;i++) {
tree.Add_Node_To_Tree(arr[i]);
}
System.out.print("请输入搜索值: ");
BufferedReader keyin = new BufferedReader(new InputStreamReader(System.in));
value = Integer.parseInt(keyin.readLine());
if(tree.findTree(tree.rootNode, value)) {
System.out.println("您要找的值 [" + value + "] 已经找到!");
} else {
System.out.println("抱歉没有找到!");
}
}
}