如何从代数表达式构造二叉树

时间:2012-10-20 04:49:58

标签: data-structures binary-tree algebraic-data-types

在我的考试中,我得到了这个表达式,但未能构建二叉树。什么是解决方案?

(5a-3b)^2*(3a+5b)^3

我从上面的表达式中提取了树

            *
           / \
          /   \
         ^     \
        / \     \
       /   \     \
      -     2     ^
    /  \         / \
   /    \       +   3
  *      *     / \
 / \    / \   /   \
5   a  3  b  *     *
            / \   / \
           3   a  5  b

我从这个答案得到0!我无法理解原因!

有人能帮助我吗?

2 个答案:

答案 0 :(得分:0)

构造二叉树并不意味着您只需绘制此处显示的图形表示。 我认为它实际上意味着在代码中实现或者在伪代码中实现。 因此,请再次使用stack使用相同的表达式 将infix表示法转换为postfix,您可以使用堆栈属性轻松解决此问题。

答案 1 :(得分:0)

我目前正在攻读离散数学课程,我们正在研究树木。你必须记住将每个级别放在自己的()中。所以我相信你创建的树看起来像这样一个表达式:((5 * a) - (3 * b))^ 2 *((3 * a)+(5 * b))^ 3。这是树的Inorder遍历。对于你的答案,你需要更像这样的东西:

                  *
                /   \
               /     \
              /       \
             ^         \
           /   \        \
          /     \        \
         -       2        ^
       /   \             /  \
      /     \           /    3
    5a       3b        +
                     /   \
                    /     \
                  3a       5b