二叉搜索树特点:左孩子结点值比当前结点值小,右孩子结点值比当前值大或等于当前值。
本文假设树中的结点值不存在相同的两项或多项。
一、二叉搜索树的创建
1、首先定义结点类
代码如下:
class TreeNode{
public int iData; //结点的数据项
public TreeNode leftChild; //结点指向左孩子的引用
public TreeNode rightChild;//结点指向右孩子的引用
public TreeNode(int iData){//构造方法,初始化结点数据项
this.iData = iData;
}
public void displayNode(){ //输出结点值
System.out.print(" "+this.iData);
}
}
2、定义二叉搜索树类
代码如下:
public class BinarySearchTree {//二叉搜索树特点:左孩子结点值比当前结点值小,右孩子结点值比当前值大或等于当前值;
public TreeNode root; //定义树的根结点
public BinarySearchTree(int iData){//构造方法用以初始化根结点值;
root = new TreeNode(iData);
}
public TreeNode find(int iData){} //查找指定结点方法
public TreeNode getParentNode(int iData){}//获取当前值结点的父结点方法
public TreeNode findMin(TreeNode root){} //查找树的最小值结点
public TreeNode findMax(TreeNode root){} //查找树的最大值结点
public TreeNode findInorderSuccessor(TreeNode node){}//查找当前结点的-右子树的-后继中序结点[即当前结点的右子树按照中序遍历获取的第一个结点]
public void deleteNode(int key){} //删除指定值的结点
public void insert(int iData){} //插入指定值的结点
public void inOrder(TreeNode node){} //中序遍历二叉搜索树的递归实现;
public void preOrder(TreeNode node){} //先序遍历二叉搜索树的递归实现;
public void postOrder(TreeNode node){} //后序遍历二叉搜索树的递归实现;
}
3、实现insert方法进行树的创建
public void insert(int iData){
TreeNode node = new TreeNode(iData);
TreeNode current ;
if(root == null){
root = node;
return;
}
else{
current = root;
while(true){
if(iData >= current.iData){
if(current.rightChild == null){
current.rightChild = node;
return;/找到插入位置就插入,并且返回不再执行
}else{
current = current.rightChild;
}
}else{
if(current.leftChild == null){
current.leftChild = node;
return;找到插入位置就插入,并且返回不再执行
}else{
current = current.leftChild;
}
}// end if
}// end while
}// end root is not null
}
二、删除树中的指定结点
删除结