如何将后缀表达式放在二叉树中?

时间:2011-12-04 14:16:53

标签: algorithm tree postfix-notation

所以我有一个二叉树和一个后缀表达式“6 2 * 3 /” 将它放在树上的算法是什么? 等,

          [/]
          / \
        [*]  [3]
        / \
      [6] [2]

2 个答案:

答案 0 :(得分:15)

要从表达式构造树,假装您直接评估它,但构造树而不是计算数字。 (这个技巧比后缀表达更多的东西。)

算法:有一个堆栈来存储中间值(树木),并从左到右检查每个标记:

  • 如果是数字,请将其转换为叶节点并将其推入堆栈。
  • 如果是运算符,则从堆栈中弹出两个项目,构造一个包含这些子节点的运算符节点,然后在堆栈上推送新节点。

最后,如果表达式正确形成,那么你应该在堆栈上只有一棵树,它是树形式的整个表达式。

答案 1 :(得分:0)

Postfix-to-tree(j){
  n <--ALLOCATE_NODE(A[j],NULL,NULL)
    Switch
      case Postfix[j] is a binary operator
        do j <--j-1
         right[n] <-- Postfix-to-tree(j)
              j <-- j-1
              left[n] <--postfix-to-tree(j)
                 case postfix[j] is a unary operator 
               do j <-- j-1
                  right[n] <-- Postfix-to-tree(j)
}