类定义
public class BinarySearchTree {
private Node tree;
public static class Node{
private int data;
private Node left;
private Node right;
public Node(int data) {
this.data=data;
}
}
}
插入数据 : 首先从根节点开始向下查找自己需要插入数据的具体位置。
public void insert(int data) {
if(tree==null) {
tree=new Node(data);
return;
}
Node p=tree;
while(p!=null) {
if(data>p.data) {
if(p.right==null) {
p.right=new Node(data);
return;
}
p=p.right;
} else {
if(p.left==null) {
p.left=new Node(data);
return;
}
p=p.left;
}
}
}
删除操作: 删除操作有 3 种情况:要删除的节点无子节点、要删除的节点只有一个子节点、要删除的节点有两个子节点。
public void delete(int data){
Node p=tree;
Node pp=null;
while(p!=null && p.data!=data){
pp=p;
if(data>p.data) p=p.right;
else p=p.left;
}
if(p==null) return;
if(p.left!=null && p.right !=null){
Node minp=p.right;
Node minpp=p ;
while(minp.left!=null){
minpp=minp;
minp=minp.left;
}
p. data=minp.data;
p=minp;
pp=minpp;
}
Node child=null;
if(p.left!=null) child=p.left;
if(p.right !=null) child=p.right;
if(pp==null) tree=child;
else if(pp.left==p) pp.left=child;
else pp.right=child;
}
|