面试华为 od外包,被逼着去刷牛客网试题,看算法。这里是使用递归实现的二叉树,如有问题敬请大家指出
#include<stdio.h>
#include<memory.h>
typedef struct TAG_BTNode
{
int value;
struct TAG_BTNode *left , *right;
}BtNode,*PBtNode;
void delBtNode(PBtNode *root , int value)
{
if((*root) == NULL)
{
printf("ûÓдËÔªËØ%d\n",value);
return;
}
if((*root)->value == value)
{
if((*root)->left == NULL && (*root)->right == NULL)
{
free((*root));
(*root) = NULL;
}else if(((*root)->left== NULL) && ((*root)->right != NULL))
{
(*root)->value = (*root)->right->value;
(*root)->left = (*root)->right->left;
(*root)->right = (*root)->right->right;
free(&(*root)->right);
(*root)->right = NULL;
}
else if(((*root)->left!= NULL) && ((*root)->right == NULL))
{
(*root)->value = (*root)->left->value;
(*root)->left = (*root)->left->left;
(*root)->right = (*root)->left->right;
free(&(*root)->left);
(*root)->left = NULL;
}else
{
PBtNode *min;
PBtNode *go = &(*root)->right;
while(1)
{
min = go;
if((*go)->left != NULL)
{
(*go) = &(*go)->left;
}else
{
break;
}
}
(*root)->value = (*go)->value;
(*min)->left = (*go)->right;
free((*go));
(*go) = NULL;
}
return;
}
if((*root)->value > value)
{
delBtNode(&(*root)->left , value);
}else
{
delBtNode(&(*root)->right , value);
}
}
void insertBtNode(PBtNode *root , int value)
{
if((*root) == NULL)
{
(*root) = (PBtNode)malloc(sizeof(BtNode));
(*root)->value = value;
(*root)->left = (*root)->right = NULL;
return;
}
if((*root)->value == value)
{
return;
}
if((*root)->value > value)
{
insertBtNode(&(*root)->left , value);
}else
{
insertBtNode(&(*root)->right , value);
}
}
void printBT(PBtNode root)
{
if(root == NULL)
return;
if(root ->left != NULL)
{
printBT(root->left);
}
printf("%d ",root->value);
if(root ->right)
{
printBT(root->right);
}
}
int main()
{
PBtNode root = NULL;
insertBtNode(&root , 2);
insertBtNode(&root , 12);
insertBtNode(&root , 8);
insertBtNode(&root , 6);
insertBtNode(&root , 4);
insertBtNode(&root , 32);
insertBtNode(&root , 5);
insertBtNode(&root , 200);
insertBtNode(&root , 22);
insertBtNode(&root , 7);
insertBtNode(&root , 12);
insertBtNode(&root , 82);
insertBtNode(&root , 52);
insertBtNode(&root , 92);
insertBtNode(&root , 0);
insertBtNode(&root , 1112);
insertBtNode(&root , 232);
insertBtNode(&root , 422);
insertBtNode(&root , 112);
printBT(root);
printf("\n");
delBtNode(&root,6);
printBT(root);
printf("\n");
delBtNode(&root,11);
printBT(root);
printf("\n");
insertBtNode(&root,82);
printBT(root);
printf("\n");
return 0;
}