二叉排序树定义就是左子树比根小,右子树比根大;
中序遍历出来的书递增的有序序列;
先说它的查找:类似于二分查找,时间复杂度为logN,这个很好理解吧,就是拿你要找的数从根比,大的话走右面,小的话走左面,每次减少一半;
再说它的插入:只要这个节点不是最底层的节点(就是这个节点下面没有其他节点了),就跟它比较如果小于就往左走,如果大于就往有走,走到空时插入;
java实现:class tree{
int data;
tree lchild;
tree rchild;
}
public void insert(tree t,int data)
{
if(t == null)
{
tree t1 = new tree();
t1.data = data;
t = t1;
}
else if(t.data > data)
{
insert(t.lchild,data);
}
else if(t.data < data)
{
insert(rchild,data);
}
}
再说这个树的创建:有了插入就很好创建了,就不写了;
再说删除:分为几种情况:
1.这种没有子节点,直接删除
2.这种有一个节点,或左或右,删除之后直接补上就ok
3.这种是左右节点都有:有两种方法(反正我就知道两种。。。),但有一种会增加树的高度,所以就不说了,用的也比较少,就说另一种,你要删除那个节点,你就找那个节点下面的树,找到它左子树中最大的点或者右子树中最小的点,把这个点替换成要删除的点,就ok了,然后替换的点本身可能有子节点,再维护一下就好了