簡體   English   中英

在這個程序中遇到一些錯誤,特別是最大和最小的 function

[英]Getting a few errors in this program specifically with the largest and the smallest function

這些是錯誤:

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM