当前位置: 首页> 游戏> 手游 > 完全二叉树的基本操作

完全二叉树的基本操作

时间:2025/7/14 7:59:17来源:https://blog.csdn.net/2301_80188157/article/details/141723695 浏览次数:0次

二叉树节点类型

typedef struct node

{

        int no;

        struct node *pleftchild;

        struct node *prightchild;

}treenode;

一.创建完全二叉树=========================================================

传入起始编号(1)和结束编号(k)

ptmpnode = malloc(sizeof(treenode));

ptmpnode->pleftchild = ptmpnode->prightchild = NULL;

ptmpnode->no = startno;

if(2*startno <= endno)  //判断有没有左孩子

{

ptmpnode->pleftchild = createcompletetree(2*startno,endno);  //左孩子调用递归函数

}

if(2*startno+1 <= endno) //判断有没有右孩子

{

ptmpnode->prightchild = createcompletetree(2*startno+1,endno);  //右孩子调用递归函数

}

return ptmpnode;

二.前序遍历(根左右)====================================================

传入根节点(*proot)

printf("%d ",proot->no);

if(proot->pleftchild != NULL) //有左孩子

{

        preorderbintree(proot->pleftchild);  //传入左孩子进行递归函数

}

if(proot->pleftchild != NULL)

{

        preorderbintree(proot->prightchild);  //有右孩子传入右孩子进行递归函数

}

三.销毁============================================================

传入二级指针根节点(**pproot)

从下往上 保证左右孩子都被free后 才能free该节点

if(*pproot->pleftchild != NULL)

{

        destroybintree(&(*pproot)->pleftchild)   //有左孩子传入左孩子进行递归函数

}

if(*pproot->prightchild != NULL)

{

        destroybintree(&(*pproot)->prightchild) //有右孩子传入右孩子进行递归函数

}

free(*pproot);

*pproot = NULL;

关键字:完全二叉树的基本操作

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: