ode = NULL;
if (root == dNode)
{
root = NULL; //root被删除, 避免野指针
}
return root;
}
BSTNode* createAVL(int *data, int size)
{
int i, j;
BSTNode *root;
if (size<1)
{
return NULL;
}
root = (BSTNode*)malloc(sizeof(BSTNode));
root->parent = NULL;
root->lchild = NULL;
root->rchild = NULL;
root->key = data[0];
root->bf = 0;
for(i=1;i root = insertNode(data[i], root);
return root;
}
void destroyAVL(BSTNode* root)
{
if (root != NULL)
{
destroyAVL(root->lchild);
destroyAVL(root->rchild);
free(root);
root=NULL;
}
}
void InOrderTraverse(BSTree root)
{
if(NULL != root)
{
InOrderTraverse(root->lchild);
printf("%d\t",root->key);
InOrderTraverse(root->rchild);
}
}
void PreOrderTraverse(BSTree root)
{
if(NULL != root)
{
printf("%d\t",root->key);
PreOrderTraverse(root->lchild);
PreOrderTraverse(root->rchild);
}
}
int main(int argc, char *argv[])
{
int data[] = {1, 5, 7, 4, 3, 2, 11, 9, 10,100};
BSTNode* root;
root = createAVL(data, sizeof(data)/sizeof(data[0]));
printf("\n++++++++++++++++++++++++++++\n");
InOrderTraverse(root);
printf("\n");
PreOrderTraverse(root);
root = deleteNode(5, root);
printf("\n++++++++delete 5++++++++++\n");
InOrderTraverse(root);
printf("\n");
PreOrderTraverse(root);
root = deleteNode(3, root);
printf("\n++++++++delete 3++++++++++\n");
InOrderTraverse(root);
printf("\n");
PreOrderTraverse(root);
root = deleteNode(1, root);
printf("\n++++++++delete 1++++++++++\n");
InOrderTraverse(root);
printf("\n");
PreOrderTraverse(root);
root = deleteNode(7, root);
printf("\n++++++++delete 7++++++++++\n");
InOrderTraverse(root);
printf("\n");
PreOrderTraverse(root);
root = deleteNode(4, root);
printf("\n++++++++delete 4++++++++++\n");
InOrderTraverse(root);
printf("\n");
PreOrderTraverse(root);
root = deleteNode(2, root);
printf("\n++++++++delete 2++++++++++\n");
InOrderTraverse(root);
printf("\n");
PreOrderTraverse(root);
printf("\n");
destroyAVL(root);
}