编写一个函数用于删除二叉树中度为1的所有节点。
要求:节点删除后,其唯一的子节点替代它的位置。
如下:
代码如下,如有问题请指出,谢谢指导:
typedef struct _tag_BTreeNode BTreeNode;
struct _tag_BTreeNode
{
int data;
BTreeNode* left;
BTreeNode* right;
};
void delete_alone_degree(BTreeNode* pRoot)
{
if (pRoot == NULL)
{
return ;
}
if ((pRoot->left == NULL) && (pRoot->right == NULL))
{
return ;
}
if ((pRoot->left == NULL) || (pRoot->right == NULL))
{
if (pRoot->left != NULL)
{
if ((pRoot->left->left == NULL) && (pRoot->left->right == NULL))
{
return ;
}
if (pRoot->left->left != NULL)
{
BTreeNode *tmp = pRoot->left->left;
free(pRoot->left);
pRoot->left = tmp;
return ;
}
else if(pRoot->left->right != NULL)
{
BTreeNode *tmp = pRoot->left->right;
free(pRoot->left);
pRoot->left = tmp;
return ;
}
}
else
{
if ((pRoot->right->left == NULL) && (pRoot->right->right == NULL))
{
return ;
}
if (pRoot->right->left != NULL)
{
BTreeNode *tmp = pRoot->right->left;
free(pRoot->right);
pRoot->right = tmp;
return ;
}
else if (pRoot->right->right != NULL)
{
BTreeNode *tmp = pRoot->right->right;
free(pRoot->right);
pRoot->right = tmp;
return ;
}
}
}
delete_alone_degree(pRoot->left);
delete_alone_degree(pRoot->right);
}