/*------------------------------------------------------------------*/
typedef struct node
{
int data;
struct node* lchild;
struct node* rchild;
}Tree,*PTree;
//data of tree struct
/*------------------------------------------------------------------*/
PTree create_node(int value)
{
PTree new_node=NULL;
new_node = (PTree)malloc(sizeof(Tree));
new_node->lchild = new_node->rchild = NULL;
new_node->data = value;
return (new_node);
}//create a new tree node
/*------------tree insert use recursion-----------------------------*/
void insert_tree(PTree _root, int value)
{
if(NULL==_root || value==_root->data)
{
return;
}//when insert value equal root->data,or root is null.just return
else if(value < _root->data)
{
if(_root->lchild==NULL)//find the node,and insert it
{
_root->lchild = create_node(value);
return;
}
else//left tree not null,so recursion again
{
insert_tree(_root->lchild,value);
}
}//find in left child tree
else
{
if(_root->rchild == NULL)//find the node,and insert it
{
_root->rchild = create_node(value);
}
else//right tree not null,so recursion again
{
insert_tree(_root->rchild,value);
}
}//find in right child tree
}
/*------------delete a singel node-----------------------------*/
PTree delete_node(PTree _root)
{
PTree p=pre=NULL;
if(NULL == _root->lchild)
{
p = _root;
_root = _root->rchild;
free(p);
}
else if(NULL == _root->rchild)
{
p = _root;
_root = _root->lchild;
free(p);
}
else
{
pre = _root;
p = _root->lchild;
while(p->rchild) //step to next left child tree
{
pre = p;
p = p->rchild;
}
_root->data = p->data;//value exchange
if(pre == _root)
{
pre->lchild = p->lchild;
}//the root->lchild's right is null
else
{
pre->rchild = p->lchild;
}
free(p);
}
return (_root);
}
/*------------delete node use recursion-----------------------------*/
PTree delete_tree(PTree _root, int _value)
{
if(_root)
{
if(_value == _root->data)
{
_root = delete_node(_root);
}
else if(_value < _root->data)
{
_root = delete_tree(_root->lchild, _value);
}
else
{
_root = delete_tree(_root->rchild, _value);
}
}
return (_root);
}
浙公网安备 33010602011771号