一.基本思想
二叉搜索树是指左右子树均小于它根结点的值,且没有键值的结点
二.复杂度分析
和二分查找一样,插入和查找的时间复杂度均为O(logn),但在最坏的情况下仍然有O(n)的时间复杂度(原因在于在插入和删除元素的时候树没有保持平衡,这也是平衡查找树设计的初衷)
性质:若按中序遍历,可以得到它由小到大的序列
三. 代码实现
public class BinaryTree {
//创建结点类
public static class Node {
Object data;
Node parent;
Node left;
Node right;
//类节点构造函数
public Node(Object data, Node parent, Node left, Node right) {
this.data = data;
this.parent = parent;
this.left = left;
this.right = right;
}
//重写equals方法
public boolean equals(Object object){
if(this == object){
return true;
}
if(object instanceof Node){
Node target = (Node)object;
return data.equals(target.data)&&left==target.left
&&right == target.right&&parent == target.parent;
}
return false;
}
}
private Node root;
public BinaryTree(){
root = null;
}
public BinaryTree(int o){
root = new Node(o, null, null, null);
}
//根据指定元素找到该节点
public Node getNode(Object element){
Node current = root;
int cmp = 0;
do{
cmp = element.equalsTo(current.data);
if(cmp > 0){
current = current.right;
}else if(cmp < 0){
current = current.left;
}else{
break;
}
}while(current != null);
return current;
}
}