wof168 2023-09-24 19:33 采纳率: 95.7%
浏览 5
已结题

二叉树输入输出为什么运行不了



#include <stdio.h>
#include <stdlib.h>

typedef struct{
char data;
struct TreeNode* lchild;
struct TreeNode* rchild;
}TreeNode;


void creatTree(TreeNode** T,char* data,int* index){//双指针才能改变外部值
char ch;

ch=data[*index];
index++;

if(ch=='#'){//''
    *T=NULL;//是*T
}
else{

    *T=(TreeNode*)malloc(sizeof(TreeNode));

    (*T)->data=ch;

    creatTree(&((*T)->lchild),data,index);

    creatTree(&((*T)->rchild),data,index);
}

}


void preOrder(TreeNode* T){

if(T==NULL){

    return;
}
else{

    printf("%c",T->data);

    preOrder(T->lchild);

    preOrder(T->rchild);

}

}




void inOrder(TreeNode* T){

if(T==NULL){

    return;
}
else{

    preOrder(T->lchild);

    printf("%c",T->data);

    preOrder(T->rchild);

}

}


void postOrder(TreeNode* T){

if(T==NULL){

    return;
}
else{


    preOrder(T->lchild);

    preOrder(T->rchild);

    printf("%c",T->data);

}

}

int main(int argc,char* argv[])
{
    TreeNode* T;
    int index=0;
    creatTree(&T,argv[1],&index);

    preOrder(T);
    printf("\n");

    inOrder(T);
    printf("\n");

    postOrder(T);
    printf("\n");


    return 0;
}
  • 写回答

2条回答 默认 最新

  • 影子身后 2023-09-24 20:26
    关注

    1、参数调用错误:你在先序遍历、中序遍历、后序遍历中,你应该调用相应的函数(如 preOrder、inOrder 和 postOrder),但你误用了 preOrder 函数。
    2、主函数参数不足:你的主函数声明为 int main(int argc, char* argv[]),这意味着它需要从命令行参数中接受输入。你需要在命令行中运行该程序,并提供一组二叉树的表示作为参数。
    3、参数解析错误:你尝试从 argv[1] 中获取表示二叉树的字符串,但你没有检查是否提供了足够的命令行参数或者字符串是否有效。

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct TreeNode {
        char data;
        struct TreeNode* lchild;
        struct TreeNode* rchild;
    } TreeNode;
    
    void creatTree(TreeNode** T, char* data, int* index) {
        char ch;
    
        ch = data[(*index)++]; // 修复这里的错误
    
        if (ch == '#') {
            *T = NULL;
        } else {
            *T = (TreeNode*)malloc(sizeof(TreeNode));
            (*T)->data = ch;
            creatTree(&((*T)->lchild), data, index);
            creatTree(&((*T)->rchild), data, index);
        }
    }
    
    void preOrder(TreeNode* T) {
        if (T == NULL) {
            return;
        } else {
            printf("%c", T->data);
            preOrder(T->lchild);
            preOrder(T->rchild);
        }
    }
    
    void inOrder(TreeNode* T) {
        if (T == NULL) {
            return;
        } else {
            inOrder(T->lchild); // 修复这里的错误
            printf("%c", T->data);
            inOrder(T->rchild); // 修复这里的错误
        }
    }
    
    void postOrder(TreeNode* T) {
        if (T == NULL) {
            return;
        } else {
            postOrder(T->lchild); // 修复这里的错误
            postOrder(T->rchild); // 修复这里的错误
            printf("%c", T->data);
        }
    }
    
    int main(int argc, char* argv[]) {
        if (argc != 2) {
            printf("Usage: %s \"AB#C##\"\n", argv[0]);
            return 1; // 返回错误状态码
        }
    
        TreeNode* T;
        int index = 0;
        creatTree(&T, argv[1], &index);
    
        printf("Preorder traversal: ");
        preOrder(T);
        printf("\n");
    
        printf("Inorder traversal: ");
        inOrder(T);
        printf("\n");
    
        printf("Postorder traversal: ");
        postOrder(T);
        printf("\n");
    
        return 0; // 返回正常状态码
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月5日
  • 已采纳回答 9月27日
  • 创建了问题 9月24日