开心的筷子122 2023-10-19 21:12 采纳率: 0%
浏览 4

求看看怎么解决报错|广义表创建二叉树

求看看怎么解决报错,GetTop为什么显示的是返回空指针呢,找不出来原因。

img

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-20 12:41
    关注

    【以下回答由 GPT 生成】

    在你的代码中,我注意到有几个问题: 1. 你定义了一个名为strIMaxSize的字符数组,但是没有指定其大小。这将导致编译错误。 2. 你没有定义top指针,这将导致无法调用PushPop函数。 3. 你没有实现GetTop函数,这将导致在调用GetTop函数时出现错误。

    为了解决这些问题,你可以按照以下步骤进行操作:

    第一步,修复字符数组大小问题:

    char strIMaxSize[100]; // 假设最大长度为100
    

    第二步,定义一个栈结构和相关函数:

    typedef struct StackNode {
        TreeNode* data;
        struct StackNode* next;
    } StackNode;
    
    typedef struct Stack {
        StackNode* top;
    } Stack;
    
    Stack* createStack() {
        Stack* stack = (Stack*)malloc(sizeof(Stack));
        stack->top = NULL;
        return stack;
    }
    
    void push(Stack* stack, TreeNode* node) {
        StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
        newNode->data = node;
        newNode->next = stack->top;
        stack->top = newNode;
    }
    
    void pop(Stack* stack) {
        if (stack->top == NULL) {
            printf("Stack is empty\n");
        } else {
            StackNode* temp = stack->top;
            stack->top = stack->top->next;
            free(temp);
        }
    }
    
    TreeNode* getTop(Stack* stack) {
        return stack->top->data;
    }
    

    第三步,修改你的CreateTree函数:

    TreeNode* CreateTree(char str[]) {
        TreeNode* root = NULL;
        TreeNode* curnode = NULL;
        int flag = 0;
    
        Stack* stack = createStack();
    
        for (int i = 0; str[i] != 0; i++) {
            switch (str[i]) {
                case '(':
                  push(stack, curnode);
                  flag = 1;
                  break;
                case ',':
                  flag = 2;
                  break;
                case ')':
                  pop(stack);
                  break;
                default:
                  TreeNode* gurnode = (TreeNode*)malloc(sizeof(TreeNode));
                  if (gurnode == NULL) {
                      printf("Memory allocation failed\n");
                      exit(EXIT_FAILURE);
                  }
                  curnode = gurnode;
                  curnode->val = str[i];
                  curnode->Lchild = NULL;
                  curnode->Rchild = NULL;
    
                  if (root == NULL)
                      root = curnode;
                  else {
                      if (flag == 1)
                          getTop(stack)->Lchild = curnode;
                      if (flag == 2)
                          getTop(stack)->Rchild = curnode;
                  }
            }
        }
    
        return root;
    }
    

    通过上述修改,你应该能够解决报错问题并成功创建二叉树。请注意在实际使用时,保证str[]的格式正确以及二叉树的创建逻辑符合你的预期。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 10月19日

悬赏问题

  • ¥15 mySQL5.7.34安装遇到的问题
  • ¥15 结构功能耦合指标计算
  • ¥20 visual studio中c语言用ODBC链接SQL SERVER
  • ¥50 AI大模型精调(百度千帆、飞浆)
  • ¥15 非科班怎么跑代码?如何导数据和调参
  • ¥15 福州市的全人群死因监测点死亡原因报表
  • ¥15 Altair EDEM中生成一个颗粒,并且各个方向没有初始速度
  • ¥15 系统2008r2 装机配置推荐一下
  • ¥15 悬赏Python-playwright部署在centos7上
  • ¥15 psoc creator软件有没有人能远程安装啊