问题描述
这些是错误:
Binary_Search_Tree_Practical.c: In function 'main':
Binary_Search_Tree_Practical.c:340:17: warning: passing argument 1 of 'largest' makes pointer from
integer without a cast [-Wint-conversion]
340 | case 7: largest(data);
| ^~~~
| |
| int
Binary_Search_Tree_Practical.c:242:20: note: expected 'NODE *' {aka 'struct BST *'} but argument is of type 'int'
242 | void largest(NODE *node)
| ~~~~~~^~~~
Binary_Search_Tree_Practical.c:342:18: warning: passing argument 1 of 'smallest' makes pointer from integer without a cast [-Wint-conversion]
342 | case 8: smallest(data);
| ^~~~
| |
| int
Binary_Search_Tree_Practical.c:251:21: note: expected 'NODE *' {aka 'struct BST *'} but argument is of type 'int'
251 | void smallest(NODE *node)
这是代码:
#include <stdio.h>
#include <stdlib.h>
struct BST {
int data;
struct BST * left;
struct BST * right;
};
typedef struct BST NODE;
NODE * node;
NODE * createtree(NODE * node,int data) {
if (node == NULL) {
NODE * temp;
temp = (NODE * ) malloc(sizeof(NODE));
temp -> data = data;
temp -> left = temp -> right = NULL;
return temp;
}
if (data < (node -> data)) {
node -> left = createtree(node -> left,data);
} else if (data > node -> data) {
node -> right = createtree(node -> right,data);
}
return node;
}
NODE * search(NODE * node,int data) {
if (node == NULL)
printf("\nElement not found");
else if (data < node -> data) {
node -> left = search(node -> left,data);
} else if (data > node -> data) {
node -> right = search(node -> right,data);
} else
printf("\nElement found is: %d",node -> data);
return node;
}
void inorder(NODE * node) {
if (node != NULL) {
inorder(node -> left);
printf("%d\t",node -> data);
inorder(node -> right);
}
}
void preorder(NODE * node) {
if (node != NULL) {
printf("%d\t",node -> data);
preorder(node -> left);
preorder(node -> right);
}
}
void postorder(NODE * node) {
if (node != NULL) {
postorder(node -> left);
postorder(node -> right);
printf("%d\t",node -> data);
}
}
NODE * findMin(NODE * node) {
if (node == NULL) {
return NULL;
}
if (node -> left)
return findMin(node -> left);
else
return node;
}
NODE * del(NODE * node,int data) {
NODE * temp;
if (node == NULL) {
printf("\nElement not found");
} else if (data < node -> data) {
node -> left = del(node -> left,data);
} else if (data > node -> data) {
node -> right = del(node -> right,data);
} else {
if (node -> right && node -> left) {
temp = findMin(node -> right);
node -> data = temp -> data;
node -> right = del(node -> right,temp -> data);
} else {
temp = node;
if (node -> left == NULL)
node = node -> right;
else if (node -> right == NULL)
node = node -> left;
free(temp);
}
}
return node;
}
void largest(NODE * node) {
while (node != NULL && node -> right != NULL) {
node = node -> right;
}
printf("\nLargest value is %d",node -> data);
}
void smallest(NODE * node) {
while (node != NULL && node -> left != NULL) {
node = node -> left;
}
printf("\nSmallest value is %d\n",node -> data);
}
int main() {
int data,ch,i,n;
NODE * root = NULL;
while (1) {
printf("\n1.Insertion in Binary Search Tree");
printf("\n2.Search Element in Binary Search Tree");
printf("\n3.Delete Element in Binary Search Tree");
printf("\n4.Inorder\n5.Preorder\n6.postorder\n7 Find Max element \n8 Exit");
printf("\nEnter your choice: ");
scanf("%d",& ch);
switch (ch) {
case 1:
printf("\nEnter No. of values: ");
scanf("%d",& n);
printf("\nEnter the values to create Binary search Tree \n");
for (i = 0; i < n; i++) {
scanf("%d",& data);
root = createtree(root,data);
}
break;
case 2:
printf("\nEnter the element to search: ");
scanf("%d",& data);
root = search(root,data);
break;
case 3:
printf("\nEnter the element to delete: ");
scanf("%d",& data);
root = del(root,data);
break;
case 4:
printf("\nInorder Traversal: \n");
inorder(root);
break;
case 5:
printf("\nPreorder Traversal: \n");
preorder(root);
break;
case 6:
printf("\npostorder Traversal: \n");
postorder(root);
break;
case 7:
largest(data);
case 8:
smallest(data);
case 9:
exit(0);
default:
printf("\nWrong option");
break;
return 0;
}
}
}
解决方法
错误是因为您将 data
而不是 root
传递给 largest
和 smallest
。这是一个修复:
case 7:
largest(root);
case 8:
smallest(root);