用線性表作爲表的組織形式時,用二分查找效率最高。但二分查找只能用於順序存儲結構,不能用鏈式存儲結構,不適用於插入刪除操作頻繁的情況,只適合靜態查找表。
對動態查找表進行高效率查找,最好用二叉排序樹。
1.基本概念
2.特點
3.二叉排序樹的插入和生成
//二叉樹結點類
public class Node {
private Integer data;
private Node left;
private Node right;
public Node() {}
public Node(int data) {
this.data=data;
}
public Integer getData() {
return this.data;
}
public void setData() {
this.data=data;
}
//得到左子樹
public Node getLeft() {
return this.left;
}
public Node getRight() {
return this.right;
}
public void setLeft(Node left) {
this.left=left;
}
public void setRight(Node right) {
this.right=right;
}
}
創建和插入結點實現:public Node createBST(Node root,int []datas) {
root=null;
int index=0;
while(index<datas.length)
{
root=insertBST(root,datas[index]);
index++;
}
return root;
}
//插入元素,非遞歸
public Node insertBST(Node root,int data) {
Node insertNode=new Node(data);
while(root!=null) {
if(root.getData()==data) {
System.out.println("該元素已存在");
return root;
}
else if(data<root.getData()) {
if(root.getLeft()!=null) {
root=root.getLeft();
}
else {
root.setLeft(insertNode);
return root;
}
}
else if(data>root.getData()) {
if(root.getRight()!=null) {
root=root.getRight();
}
else {
root.setRight(insertNode);
return root;
}
}
}
root=insertNode;
return root;
}
//插入元素 遞歸
public Node rInsertBST(Node root,int data) {
Node insertNode=new Node(data);
if(root==null) {
root=insertNode;
}
else if(data<root.getData()) {
root=root.getLeft();
root=rInsertBST(root,data);
}
else if(data>root.getData()) {
root=root.getRight();
root=rInsertBST(root,data);
}
return root;
}
4.查找
public boolean search(Node root,int data) {
while(root!=null) {
if(root.getData()==data)
return true;
else if(data<root.getData())
root=root.getLeft();
else if(data>root.getData())
root=root.getRight();
}
return false;