解题代码
BinTree Insert(BinTree BST, ElementType X) {
if (!BST) {
BST = malloc(sizeof(struct TNode));
BST->Data = X;
BST->Left = BST->Right = NULL;
}
else if (X < BST->Data) BST->Left = Insert(BST->Left, X);
else if (X > BST->Data) BST->Right = Insert(BST->Right, X);
return BST;
}
Position Find(BinTree BST, ElementType X) {
if (!BST) return NULL;
if (X < BST->Data) Find(BST->Left, X);
else if (X > BST->Data) Find(BST->Right, X);
else return BST;
}
Position FindMin(BinTree BST) {
if (!BST) return NULL;
if (BST->Left) FindMin(BST->Left);
else return BST;
}
Position FindMax(BinTree BST) {
if (!BST) return NULL;
if (BST->Right) FindMax(BST->Right);
else return BST;
}
BinTree Delete(BinTree BST, ElementType X) {
if (!BST) {
printf("Not Found\n");
return NULL;
}
if (X < BST->Data) BST->Left = Delete(BST->Left, X);
else if (X > BST->Data) BST->Right = Delete(BST->Right, X);
else if (BST->Left&&BST->Right) {
BST->Data = FindMax(BST->Left)->Data;
BST->Left = Delete(BST->Left, BST->Data);
}
else {
BinTree temp = BST;
if (!BST->Left) BST = BST->Right;
else if (!BST->Right) BST = BST->Left;
free(temp);
}
return BST;
}
测试结果
问题整理
1.少了一个else导致段错误,这个故事告诉我们,emmmm