二叉树的简单运算实现

来源:互联网 发布:泰山石敢当 知乎 编辑:程序博客网 时间:2024/04/29 12:45

二叉树基本运算的实现算法,依赖于具体的存储结构;采用不同的存储结构,二叉树的基本运算的实现算法是不同的。

这里讨论的运算实现算法,是以二叉链表为存储结构的。

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);//释放左子树空间}