二叉排序树相关操作
2015-09-11 18:26
357 查看
二叉排序树定义就是左子树比根小,右子树比根大;
中序遍历出来的书递增的有序序列;
先说它的查找:类似于二分查找,时间复杂度为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了,然后替换的点本身可能有子节点,再维护一下就好了
中序遍历出来的书递增的有序序列;
先说它的查找:类似于二分查找,时间复杂度为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了,然后替换的点本身可能有子节点,再维护一下就好了
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树