//查找
public BinaryNode<E> search(E value){//查找值为value的结点
return search(root,value);
}
private BinaryNode<E> search(BinaryNode<E> p,E value){//在以p为根的子树中查找值为value结点,先根次序遍历,返回查找的结点,若未找到返回null
BinaryNode<E> find = null;//记载找到的结点
if(p != null && value != null){
if(p.data.equals(value))
find = p;//查找成功
else{
find = search(p.left,value);//在左子树中查找
if(find == null)
find = search(p.right,value);//若左子树中未找到,则继续在右子树中查找
}
}
return find;//返回找到结点
}
//插入一个结点
public void insert(BinaryNode<E> p,E element,boolean leftChild){//插入元素element作为p的孩子,若leftChild为true,插入结点作为左孩子,否则作为右孩子
if(p != null)
if(leftChild)
p.left = new BinaryNode<E>(element,p.left,null);
else
p.right = new BinaryNode<E>(element,null,p.right);
}
public void insert(BinaryNode<E> p,E element){//插入元素element作为p结点的左孩子
insert(p,element,true);
}
//删除一课子树
public void remove(BinaryNode<E> p,boolean leftChild){//删除p结点的左/右子树,若leftChild为true,删除左子树,否则删除右子树
if(p != null)
if(leftChild)
p.left = null;
else
p.right = null;
}
public void remove(BinaryNode<E> p){
remove(p,true);
}
}