2301_78694781 2024-05-12 15:17 采纳率: 91.7%
浏览 14
已结题

不知道是该怎么引用多个函数片段

我在一个函数中引用我在另外函数中写的代码,但是一直报错,下面是其中一个函数的片段,我该怎么才能正确引用

#include <stdio.h>
#include <stdlib.h>
#define maxsize 100

void fun(Node *&t, char *a) {
    int i = 0, top = -1, tag;
    Node *s[maxsize];
    t = NULL;
    Node *p;
    char ch;
    ch = a[i];
    while (ch != '\0') {
        switch (ch) {
            case '(':
                top++;
                s[top] = p;
                tag = 1;
                break;
            case ')':
                top--;
                break;
            case ',':
                tag = 2;
                break;
            default:
                p = (Node *)malloc(sizeof(Node));
                p->data = ch ;
                p->lchild = p->rchild = NULL;
                if (t == NULL) {
                    t = p;
                } else {
                    switch (tag) {
                        case 1:
                            s[top]->lchild = p;
                            break;
                        case 2:
                            s[top]->rchild = p;
                            break;
                    }
                }
        }
        i++;
        ch = a[i];
    }
}

```c
#include<stdio.h>
#include<stdlib.h>
#define maxsize 100
typedef struct Node{
    int data;
    struct Node *lchild;
    struct Node *rchild;
}Node;



int main() {
    Node *tree;
    char a[] = "(1(2(,),3(4(6,),5)))"; 
    fun(tree, a);
    
    printf("横向输出二叉树:\n");
    printftree(tree, 0);
    printf("\n");
    
    int h = height(tree);
    printf("树的高度为 %d\n", h);
    
    int num = countNodes(tree);
    printf("节点数量为 %d\n", num);
    
    printf("递归中序遍历结果:\n");
    inordertraverse(tree);
    printf("\n");
    
    printf("非递归中序遍历结果:\n");
    inordertraverse1(tree);
    printf("\n");
    
    printf("层次遍历结果为\n");
    leveltraver(tree);
    printf("\n");
    
    char x, y;
    printf("输入 x 和 y 的值:\n");
    scanf(" %c %c", &x, &y);
    printf("是兄弟节点就返回 1,否则返回 0: %d\n", findbro(tree, x, y));
    
    if (istree(tree))
        printf("是完全二叉树\n");
    else
        printf("不是完全二叉树\n"); 
    
    return 0;
}





  • 写回答

23条回答 默认 最新

  • 笑面虎 2024-05-12 15:17
    关注

    以下内容由CHATGPT及笑面虎共同生成、有用望采纳:


    【您想要解决的问题】:您提问的目的是想要了解如何在C语言中正确地在主函数main中引用在另一个函数fun中定义的二叉树节点,并调用其他相关的函数来操作这个二叉树。

    【问题出现原因】:从您提供的代码片段来看,问题可能出现在以下几个方面:

    1. fun函数中对Node *&t的引用可能不正确。在C语言中,指针的引用通常是通过指针的指针(即二级指针)来实现的,但是您的代码中Node *&t的语法是不正确的。
    2. 您在main函数中调用了printftreeheightcountNodesinordertraverseinordertraverse1leveltraverfindbro等函数,但是在提供的代码中并没有这些函数的定义或声明。
    3. istree函数在代码中没有出现,可能是用于判断完全二叉树的函数,但是在main函数中被调用了但没有定义或声明。

    【问题解决方案】:为了解决这些问题,您需要做以下几步:

    1. 修正fun函数的参数,使用正确的二级指针来修改指针的值。
    2. 确保所有在main函数中调用的函数都有相应的定义和声明。
    3. 如果Node结构体定义需要在多个文件中使用,确保它在一个头文件中定义,并且通过#include指令在需要它的源文件中包含这个头文件。

    【提供代码】:以下是修改后的fun函数和其他函数的声明示例,以及如何在main函数中正确调用它们:

    // Node.h - 头文件,包含Node结构体定义和函数声明
    #ifndef NODE_H
    #define NODE_H
    
    typedef struct Node {
        int data;
        struct Node *lchild;
        struct Node *rchild;
    } Node;
    
    // 函数声明
    void fun(Node **t, char *a);
    int height(Node *tree);
    int countNodes(Node *tree);
    void printftree(Node *tree, int space);
    void inordertraverse(Node *tree);
    void inordertraverse1(Node *tree);
    void leveltraver(Node *tree);
    int findbro(Node *tree, char x, char y);
    int istree(Node *tree);
    
    #endif
    
    // fun.c - fun函数的定义
    #include "Node.h"
    #include <stdio.h>
    #include <stdlib.h>
    #define maxsize 100
    
    void fun(Node **t, char *a) {
        // ... (函数体不变,确保使用二级指针)
    }
    
    // main.c - 主函数和其他函数的定义
    #include "Node.h"
    
    // ... (其他函数的定义)
    
    int main() {
        Node *tree = NULL; // 注意这里使用二级指针
        char a[] = "(1(2(,),3(4(6,),5)))";
        fun(&tree, a);
        
        // ... (其他函数的调用)
        
        return 0;
    }
    

    【代码运行方式】:您需要将Node结构体和函数声明放在一个头文件中,比如Node.h,然后在实现这些函数的源文件中包含这个头文件。接着,编译所有的源文件,并将它们链接在一起以生成可执行文件。您可以在支持C语言的任何环境中运行这段代码,比如GCC或Visual Studio。

    【代码预期运行结果】:如果您正确实现了所有函数,并且修正了引用的问题,代码应该能够成功编译并运行,创建一个二叉树,并执行各种操作,如打印、计算高度、节点计数、遍历等。

    【推荐相关链接】:

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 5月20日
  • 创建了问题 5月12日