二叉树节点类型
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;