我需要弄清楚如何创建算术表达式树。
我可以使用一组数字创建简单的二叉树。下面是一个代码示例:
这是我树的简单节点。
typedef struct _node {
int key;
struct _node *left, *right;
} node;
这就是我将新节点添加到二叉树的方法:
node* add_tree(node *root, int val) {
if(NULL == root) {
root = crnode(val);
}
if (val < root->key) {
if (NULL == root->left) {
root->left = crnode(val);
}
else {
add_tree(root->left, val);
}
}
if (val > root->key) {
if (NULL == root->right) {
root->right = crnode(val);
}
else {
add_tree(root->right, val);
}
}
return root;
}
这是主要功能,并介绍如何向树添加新号码:
int main(int argc, const char * argv[])
{
node *tree = add_tree(NULL, 5);
tree = add_tree(tree, 6);
tree = add_tree(tree, 7);
tree = add_tree(tree, 3);
return 0;
}
我的问题是:如何转换这个代码,我不仅可以使用数字而且使用运算符(例如+ - / *)。
例如,我需要将表达式5 *(10 - 5)+ 6 * 4转换为树。我该怎么做?
答案 0 :(得分:4)
表达式中的节点是以下两种情况之一:运算符或值。所以你需要描绘出来。有几种方法可以做到这一点,但由于这是家庭作业,我倾向于保持谨慎,让你使用迄今为止学到的编程概念来解决问题。
所以我决定通过展示你的节点工作时树的样子来帮助你:
+
/ \
/ \
/ \
* *
/ \ / \
5 - 6 4
/ \
10 5
您可能希望放弃构建树的概念,而是将其视为构建表达式&#39;。这可能是什么阻碍了你。您可能会得到一些像这样使用的函数:
node *expr = subtract(value(10), value(5));
构建树的一部分。看看发生了什么? =)