改了几天的蒟蒻,但未能满分
查看原帖
改了几天的蒟蒻,但未能满分
255540
Her_Lingxiao楼主2022/7/22 23:35
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
struct Node
{
	char data;
	int Left, Right;
    bool Read;
    //BNode[Left] or BNode[Right]   
    Node()
    {
        Left = Right = -1;
        Read = false;
    }
}BNode[30];//类哈希
string Mid, Front;
int k = 0;
void Build(int root, int Mid_left, int Mid_right)//no bug
{
    if(Mid_left == Mid_right)
        return;
    int next = Mid.find(Front[k + 1]);//next指下一预定根
    if(next > Mid_right || next < Mid_left)//越界
        return;
    if(next < root)//下一预定根在左子树
    {
        k++;
        BNode[Mid[root] - 'A'].Left = Front[k] - 'A';
        Build(next, Mid_left, root - 1);
    }
    next = Mid.find(Front[k + 1]);
    if(next > root)//下一预定根在右子树
    {
        k++;
        BNode[Mid[root] - 'A'].Right = Front[k] - 'A';
        Build(next, root + 1, Mid_right);
    }
    return;
}
void dfs(int now)//bug
{
    //前序
    if(BNode[now].Left != -1)
        dfs(BNode[now].Left);
    //中序
    if(BNode[now].Right != -1)
        dfs(BNode[now].Right);
    //后序
    if(!BNode[now].Read)
        printf("%c", BNode[now].data), BNode[now].Read = true;
    return;
}
int main()
{
	cin >> Mid >> Front;
    for(int i = 0; i < Mid.size(); i++)
        if(BNode[Mid[i] - 'A'].data)
            BNode[Mid[i] - 'A'].data = Mid[i];
    int root = Mid.find(Front[0]);
    Build(root, 0, Mid.size() - 1);
    dfs(Mid[root] - 'A');
    printf("\n");
    //system("pause");
    //我用vscode写的,环境配的时候必须要写一个pause
	return 0;
}

就只是一个奇怪的错误

改了好久了,人晕了,也搞不清错误在哪了

2022/7/22 23:35
加载中...