完全二叉树的基本操作

二叉树节点类型

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值