动不了一点 2024-01-30 21:41 采纳率: 17.2%
浏览 1

关于c++代码的问题,请各位专家解答!

谁能告诉我这是什么问题

img

代码在这

#include "iostream"
#include "string"
using std::cin;
using std::cout;
using std::endl;
using std::string;
struct Tree
{
    char data; 
    struct Tree* lchild;
    struct Tree* rchild;
    string str1, str2;
};
string st1, st2;
string sr1, sr2, sr3, sr4;
void dfs(Tree* T, string s1, string s2) {
    int size, temp;
    if (T == NULL)
        return;
    size = s1.size();
    if (size == 1) {
        T->data = s2[0];
        T->lchild = NULL;
        T->rchild = NULL;
        return;
    }
    temp = T->str1.find(s2[0]);
    T->data = s2[0];
    Tree* q = (struct Tree*)malloc(sizeof(struct Tree));
    Tree* p = (struct Tree*)malloc(sizeof(struct Tree));
    q->str1 = s1.substr(0, temp);            //中序    前
    q->str2 = s2.substr(1, temp);        //前序 前
    if (q->str2.size() != 0)
    {
        T->lchild = q;
    }
    else T->lchild = NULL;
    p->str1 = s1.substr(temp + 1, size - temp - 1);        //中序 后
    p->str2 = s2.substr(temp + 1, size - temp - 1);        //前序 后
    if (p->str2.size() != 0)
    {
        T->rchild = p;
    }
    else T->rchild = NULL;
    dfs(T->lchild, q->str1, q->str2);
    dfs(T->rchild, p->str1, p->str2);
}

void visit(Tree* T) {
    if (T == NULL)
        return;
    cout << T->data;
}

void preOrder(Tree* T) {
    if (T != NULL) {
        preOrder(T->lchild);
        preOrder(T->rchild);
        visit(T);
    }
}

int main() {
    
    cin >> st1 >> st2;
    Tree *root= (struct Tree*)malloc(sizeof(struct Tree));
    root->lchild = NULL;
    root->rchild = NULL;
    dfs(root, st1, st2);
    preOrder(root);
    
    
}

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-01-30 21:42
    关注

    引自免费微信小程序:皆我百晓生

    你的代码存在以下问题:

    1. 头文件引用不符合规范:C++标准库的头文件应该没有.h扩展名,你应该使用#include <iostream>#include <string>

    2. using namespace应该避免使用,因为它会导入整个命名空间,可能导致命名冲突,而且使代码更难阅读。你可以使用using来引入特定的名称,例如using std::cin;using std::cout;

    3. 不使用malloc:C++推荐使用new关键字来动态分配内存,而不是C语言的malloc函数。所以你可以用Tree* q = new Tree;Tree* p = new Tree;来替代。

    4. 不要忘记释放内存:你在main函数中使用了malloc来分配root的内存,但是没有使用free来释放。应该用delete来释放使用new分配的内存,所以你需要在程序结束之前添加delete root;来释放内存。

    5. 递归函数dfs中的错误:在dfs函数中,你应该先递归调用dfs函数,然后再处理当前节点的数据。所以你应该在最后两行的dfs函数调用之前调用dfs(T->lchild, q->str1, q->str2);dfs(T->rchild, p->str1, p->str2);

    修正后的代码如下:

    #include <iostream>
    #include <string>
    using std::cin;
    using std::cout;
    using std::endl;
    using std::string;
    struct Tree
    {
        char data;
        struct Tree* lchild;
        struct Tree* rchild;
        string str1, str2;
    };
    string st1, st2;
    string sr1, sr2, sr3, sr4;
    void dfs(Tree* T, string s1, string s2) {
        int size, temp;
        if (T == NULL)
            return;
        size = s1.size();
        if (size == 1) {
            T->data = s2[0];
            T->lchild = NULL;
            T->rchild = NULL;
            return;
        }
    
        temp = s1.find(s2[0]);
        T->data = s2[0];
        Tree* q = new Tree;
        Tree* p = new Tree;
        q->str1 = s1.substr(0, temp);
        q->str2 = s2.substr(1, temp);
        if (q->str2.size() != 0)
        {
            T->lchild = q;
            dfs(T->lchild, q->str1, q->str2);  // 递归调用dfs函数
        }
        else T->lchild = NULL;
        p->str1 = s1.substr(temp + 1, size - temp - 1);
        p->str2 = s2.substr(temp + 1, size - temp - 1);
        if (p->str2.size() != 0)
        {
            T->rchild = p;
            dfs(T->rchild, p->str1, p->str2);  // 递归调用dfs函数
        }
        else T->rchild = NULL;
    }
    
    void visit(Tree* T) {
        if (T == NULL)
            return;
        cout << T->data;
    }
    
    void preOrder(Tree* T) {
        if (T != NULL) {
            preOrder(T->lchild);
            preOrder(T->rchild);
            visit(T);
        }
    }
    
    int main() {
    
        cin >> st1 >> st2;
        Tree* root = new Tree;
        root->lchild = NULL;
        root->rchild = NULL;
        dfs(root, st1, st2);
        preOrder(root);
    
        delete root;
        return 0;
    }
    

    希望这个代码修正能够帮助到你!如果你有任何其他问题,请随时提问。

    评论

报告相同问题?

问题事件

  • 创建了问题 1月30日

悬赏问题

  • ¥15 C# 用partial定义部分类无法快速预览代码
  • ¥15 fastreport 代码无法设置最后一页横线不显示
  • ¥15 stm32u535芯片usb hid custom类接收数据有问题
  • ¥20 quartus功能仿真
  • ¥15 传染病最优控制问题,控制为什么没起作用
  • ¥15 ue5.3 pico打包失败 求帮助
  • ¥15 请教,这是用chatgpt写的CAD LISPD脚本,需求是画一个由双直线组成的矩形
  • ¥50 微信小程序 成功包奶茶啊
  • ¥15 计算机博弈的六子棋代码
  • ¥15 在Fetch API中传送的参数为何不起作用?