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将输入读取到新节点?好吧,我可能有点太直截了当了,但是阅读您的回复,我假设您不知道构造函数是什么,所以您不知道我不知道什么到处闲逛,很公平。