i understand what each line does here
but i cant see what this function does in general??
Code:
typedef struct node node; //node is alias for struct node
struct node{
int value,count;
node *lc,*rc;
};
node *what(node *tree){
node *save,*temp;
int flag;
if(!tree)return NULL; //if root is null the program stops and return null
if(!tree->lc && !tree->rc){
free(tree);
return NULL;
} //if the sons of root is null then we free the root and
//return null
save=temp=tree; // save and temp point to the same place as the root
if(save->lc) {flag=1; //if (*save).lc differs null
save=save->lc; //save points to the same place as its left son
while(save->rc){ //while saves right son differs null
flag=0;
temp=save;
save=save->rc; //save point to the same place where save right son
}
}
else{ flag=0; //if (*save).lc equals null
save=save->rc; //save points to the same place as its right son
while(save->lc){ //while saves left son differs null
flag=0;
temp=save;
save=save->rc; //save points to the same place as its right son
}
}
if(!flag)
temp->rc=save->lc;
else
temp->lc=save->rc;
tree->value=save->value;
return tree;
}