以二叉链表实现的二叉树的接口可定义为如下
interface BinaryTree {
public BiTreeNode CreateBTree(); //建立二叉树的二叉链表存储结构
public void preorder(BiTreeNode t); //先序遍历
public void inorder(BiTreeNode t); //中序遍历
public void postorder(BiTreeNode t); //后序遍历
public int depthBtree(BiTreeNode t); //求树的深度
public int countBtree(BiTreeNode t); //求树结点个数
}
二叉树结点类可描述如下
class BiTreeNode {
public Object element;
public BiTreeNode left, right;
public BiTreeNode (Object obj){
element=obj;left=right=null;};
public BiTreeNode (Object obj, BiTreeNode lt,BiTreeNode rt ){
element=obj;left=lt;right=rt;}
}
二叉树类实现
class LinkBinaryTree implements BinaryTree {
public BiTreeNode root; // 二叉链表的根结点指针
public LinkBinaryTree(){
root=null;}
public LinkBinaryTree(BiTreeNode r){
root=r;}
public LinkBinaryTree(String preOrder,String inOrder,int preIndex,int inIndex,int count)
{
//采用先序遍历和中序遍历序列建立二叉树
//preIndex是先序遍历开始位置
//inIndex是中序遍历开始位置
//count是长度
if(count>0) //先序遍历和中序遍历非空
{
char r = preOrder.charAt(preIndex); //取先序遍历第一个结点作为根节点
int i=0;
for(;i<count;i++) //寻找根节点在中序遍历中的位置
{
if(r == inOrder.charAt(i+inIndex))
break;
}
root = new BTreeNode(r); //建立树的根节点
root