Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用堆栈构建表达式树_C++_Stack_Expression Trees - Fatal编程技术网

C++ 使用堆栈构建表达式树

C++ 使用堆栈构建表达式树,c++,stack,expression-trees,C++,Stack,Expression Trees,我正在尝试编写一个表达式树函数,它接受字符数组表达式并输出前缀、中缀和后缀版本。我已经编写了这段代码,它不会抛出任何错误,但是当运行时,计算出的值不会打印出来。我已经试着调试这个函数,但仍然无法找到解决方案。有人能给我一些关于我做错了什么的建议吗 void Expression_Tree::build_expression_tree(char input[], int size) { ETNode *temp, *t1, *t2; for (int i = 0; i <

我正在尝试编写一个表达式树函数,它接受字符数组表达式并输出前缀、中缀和后缀版本。我已经编写了这段代码,它不会抛出任何错误,但是当运行时,计算出的值不会打印出来。我已经试着调试这个函数,但仍然无法找到解决方案。有人能给我一些关于我做错了什么的建议吗

void Expression_Tree::build_expression_tree(char input[], int size)
{
    ETNode *temp, *t1, *t2;

    for (int i = 0; i < size; i++)
    {
        if(!(i == '+' || i == '-' || i == '*' || i == '/' || i == '^')) {
            temp = new ETNode;
            temp->left = temp->right = NULL;
            temp->input = i;

            tree_stack.push(temp);
        }
        else {
            temp = new ETNode;
            temp->left = temp->right = NULL;
            temp->input = i;

            t1 = tree_stack.top();
            tree_stack.pop();
            t2 = tree_stack.top();
            tree_stack.pop();

            temp->right = t1;
            temp->left = t2;

            tree_stack.push(temp);
        }
    }

    temp = tree_stack.top();
    tree_stack.pop();
}
void Expression_Tree::build_Expression_Tree(char input[],int size)
{
ETNode*temp、*t1、*t2;
对于(int i=0;i左=临时->右=空;
温度->输入=i;
树_堆栈推送(温度);
}
否则{
temp=新的ETNode;
临时->左=临时->右=空;
温度->输入=i;
t1=树_stack.top();
tree_stack.pop();
t2=树_stack.top();
tree_stack.pop();
温度->右侧=t1;
温度->左=t2;
树_堆栈推送(温度);
}
}
temp=tree_stack.top();
tree_stack.pop();
}

我刚刚包含了build_expression_tree函数,如果没有任何错误,那么它就不能正确地链接到我的inorder、preorder和posterorder函数。谢谢

这可能是复制粘贴错误,但您使用的是
i
,就好像它是
char
一样


我想您应该改用
input[I]
,至少在
if
语句中是这样。

这可能是一个复制粘贴错误,但您使用的
I
就像它是一个
char
一样



我想你应该改用
input[I]
,至少在你的
if
语句中是这样。

我试过了,它抛出了一个分段fault@user6276841:那么您可能应该检查传递给函数的内容。这是我的测试程序文件中正在传递的相关代码:
char input[]={'2','+','(','3','*','('、'2'、'+'、'2'、')、')、'+'、'5'};int size=sizeof(input)/sizeof(char);Expression_Tree a;a.build_Expression_Tree(input,size);
@user6276841我认为
sizeof(input)
给出了
input
的元素数,所以不必除以
sizeof(char)
。你能检查一下
大小
值是否正确吗?如果不是这样,你能找到segfaulted的确切行吗?如果你不能调试,添加一些
printf
,看看你的代码在哪里。@Gwen我试图调试,但调试程序抛出了大量我从未收到过的“多重定义”错误是的,我试过了,结果它掉了一个碎片fault@user6276841:那么您可能应该检查传递给函数的内容。这是我的测试程序文件中正在传递的相关代码:
char input[]={'2','+','(','3','*','(','2','+','2','),'),'),'+','5'};int size=sizeof(input)/sizeof(char);Expression_Tree a;a.build_Expression_Tree(input,size);
@user6276841我认为
sizeof(input)
给出了
input
的元素数,因此不必除以
sizeof(char)
。你能检查一下
大小
值是否正确吗?如果不是这样,你能找到segfaulted的确切行吗?如果你不能调试,添加一些
printf
,看看你的代码在哪里。@Gwen我试图调试,但调试程序抛出了大量我从未收到过的“多重定义”错误在C++中,通常的方法是使用构造函数初始化成员(这里是:代码> ETNode < /代码>),不让用户代码进行初始化。@stefaanv我有一个ETNode类alsoSo,为什么要在用户代码中将左指针和右指针设置为NULL?@stefaanv将输入读取到新节点?好吧,我可能有点太直截了当了,但是阅读您的回复,我假设您不知道构造函数是什么,所以您不知道我不知道什么在C++中,通常的方法是使用构造函数初始化成员(这里是:代码> ETNode < /代码>),不让用户代码进行初始化。@stefaanv我有一个ETNode类alsoSo,为什么要在用户代码中将左指针和右指针设置为NULL?@stefaanv将输入读取到新节点?好吧,我可能有点太直截了当了,但是阅读您的回复,我假设您不知道构造函数是什么,所以您不知道我不知道什么到处闲逛,很公平。