实现不全,以后再补充
package binaryTree;
import dictionaryADT.Dictionary;
public class BST implements Dictionary{
private BinNode root;
private int nodecount;
public BST()
{
root =null;
nodecount = 0;
}
private void clearHelp(BinNode root)
{
if(root == null)
return;
clearHelp(root.left());
clearHelp(root.right());
root= null;
}
private BinNode insertHelp(BinNode root,Object obj)
{
if( root == null)
{
BinNode bn = new BinNodePtr(obj,null,null);
root = bn;
}
else if((int)obj < (int)root.val())
{
root.setLeft(insertHelp(root.left(),obj));
}
else if((int)obj >= (int)root.val())
{
root.setRight(insertHelp(root.right(),obj));
}
return root;
}
private BinNode deleteMin(BinNode root)
{
if(root.left() == null)
{
return root.right();
}
else
{
root.setLeft(deleteMin(root.left()));
return root;
}
}
private BinNode removeHelp(BinNode root,Object key)
{
if(root == null)
return null;
else if((int)key < (int)root.val())
root.setLeft(removeHelp(root.left(),key));
else if((int)key >= (int)root.val())
root.setRight(removeHelp(root.right(),key));
else
{
if(root.left() == null)
root = root.right();
else if(root.right() == null)
root = root.left();
else
{
root.setRight(deleteMin(root.right()));
//下面还有些步骤实现
}
}
return root;
}
boolean findHelp(BinNode root,Object key)
{
if(root == null)
return false;
else if((int)key < (int)root.val())
{
return findHelp(root.left(),key);
}
else if((int)key > (int)root.val())
{
return findHelp(root.right(),key);
}
else
{
return true;
}
}
void printHelp(BinNode root,int level)
{
if(root == null)
return;
printHelp(root.left(),level + 1);
for(int i = 0;i < level;i++)
System.out.print(" ");
System.out.println(root.val());
printHelp(root.right(),level + 1);
}
@Override
public void clear() {
clearHelp(root);
root = null;
nodecount = 0;
}
@Override
public boolean insert(Object obj) {
root = insertHelp(root,obj);
nodecount++;
return true;
}
@Override
public Object remove(Object key) {
root = removeHelp(root,key);
nodecount--;
return root.val();
}
@Override
public boolean removeAny() {
if(root == null)
return false;
root = deleteMin(root);
nodecount--;
return true;
}
@Override
public boolean find(Object key) {
return findHelp(root,key);
}
@Override
public int size() {
return nodecount;
}
void print()
{
if(root == null)
System.out.println("The BST is empty.");
else
printHelp(root,0);
}
public static void main(String[] args)
{
BST bst = new BST();
bst.insert(4);
bst.insert(3);
bst.insert(5);
bst.insert(2);
bst.insert(1);
bst.print();
System.out.println(bst.nodecount);
}
}
main函数是用来测试的,请无视之
结点的删除还是没弄太懂,所以removeHelp实现不全