微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在这个程序中得到一些错误,特别是最大和最小的函数

如何解决在这个程序中得到一些错误,特别是最大和最小的函数

这些是错误

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 传递给 largestsmallest。这是一个修复:

        case 7:
            largest(root);
        case 8:
            smallest(root);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。