使用c语言的算术表达式树

时间:2012-09-24 13:19:12

标签: c binary-tree expression-trees

我需要弄清楚如何创建算术表达式树。

我可以使用一组数字创建简单的二叉树。下面是一个代码示例:

这是我树的简单节点。

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转换为树。我该怎么做?

1 个答案:

答案 0 :(得分:4)

表达式中的节点是以下两种情况之一:运算符或值。所以你需要描绘出来。有几种方法可以做到这一点,但由于这是家庭作业,我倾向于保持谨慎,让你使用迄今为止学到的编程概念来解决问题。

所以我决定通过展示你的节点工作时树的样子来帮助你:

      +
     / \
    /   \
   /     \
  *       *
 / \     / \
5   -   6   4
   / \
  10  5

您可能希望放弃构建树的概念,而是将其视为构建表达式&#39;。这可能是什么阻碍了你。您可能会得到一些像这样使用的函数:

node *expr = subtract(value(10), value(5));

构建树的一部分。看看发生了什么? =)