二叉树基本运算的实现算法,依赖于具体的存储结构;采用不同的存储结构,二叉树的基本运算的实现算法是不同的。
这里讨论的运算实现算法,是以二叉链表为存储结构的。
1.设置空二叉树
void setnull(bitree bt)//设置一颗空二叉树,即置头结点的左右孩子链域为空
{
bt->lchild=NULL;
bt->rchild=NULL;
}
2.求二叉树的根
elemtype root(bitree bt)//该运算返回二叉树根结点的值,当二叉树为空树时返回NULL
{
if(bt->lchild==NULL)
return NULL;
else
return bt->lchild->data;
}
3.建立二叉树操作
bitree create(elemtype x,bitree lbt,bitree rbt)//该运算生成一棵以x为根结点,lbt和rbt分别为左右子树的二叉树
{
bitree p;//定义局部变量
p=(bitree)malloc(sizeof(bitnode));//申请一个结点空间,地址传给p指针
p->data=x;//填x于数据域
p->lchild=lbt;//把二叉树lbt填入p的左孩子链域
p->rchild=rbt;//把二叉树rbt填入p的右孩子链域
return p;//返回建成的二叉树
}
4.插入左孩子
void addlchild(bitree bt,elemtype x)//把元素x插入到二叉树bt中成为它的左孩子
{
bitree p;
p=(bitree)malloc(sizeof(bitnode));//申请一个结点空间
p->data=x;//填入元素x
p->lchild=NULL;
p->rchild=NULL;
bt->lchild=p;//插入bt左孩子域
}
5.删除左孩子
void dellchild(bitree bt)//删除二叉树bt的左孩子,整个左子树全部被删除
{
bitree p;
p=bt->lchild;//保存左子树指针
bt->lchild=NULL;//bt的左孩子域置空
free(p);//释放左子树空间
}