【发布时间】:2016-05-02 11:28:12
【问题描述】:
我正在尝试编写一个表达式树函数,该函数接受一个字符数组表达式并输出前缀、中缀和后缀版本。我已经编写了这段代码,它不会抛出任何错误,但是在运行计算值时不会打印出来。我试图调试该功能,但仍然无法提出解决方案。有没有人能给我关于我做错了什么的提示?
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();
}
我刚刚包含了 build_expression_tree 函数,如果这没有任何问题,那么它一定不能正确链接到我的 inorder、preorder 和 postorder 函数。谢谢!
【问题讨论】:
-
C++ 中的常规方式是使用构造函数来初始化成员(这里:
ETNode),而不是让用户代码进行初始化。 -
@stefaanv 我也有一个 ETNode 类
-
那么,为什么要在用户代码中设置左右指针为NULL呢?
-
@stefaanv 将输入读入新节点?
-
好吧,我可能有点太直率了,但是看了你的回复,我假设你不知道构造函数是什么,所以你不知道我在说什么。很公平。
标签: c++ stack expression-trees