在不使用堆栈的情况下从中缀表达式构建二叉树

时间:2011-08-07 14:56:13

标签: c++ algorithm

最近我写了一个算法convert an infix expression to a binary tree without using any stack。但是,当我在网上搜索时,我发现那里描述的算法都基于堆栈(或递归)。

所以我开始担心我的算法的正确性,尽管我无法证明 它还不正确。

问题

你知道技术上是否可以在没有任何堆栈的情况下进行转换?我的算法错了吗?

简短说明

它基于:

  1. 中缀表达式中的操作数属于其前面的运算符的右子节点,或者属于它后面的运算符的左子节点。

  2. 如果运算符OP2的优先级高于其前一个运算符OP1,则前一个操作数x将成为OP2的左子项,{{1}成为OP2的正确孩子。

  3. 如果运算符OP1的优先级低于其前一个运算符OP2,则前一个操作数OP1将成为x的正确子级。从OP1向上移动树,将OP1的每个祖先的优先级与OP1的优先级进行比较,直到OP2< = ancestor OP2。然后OP成为OP2的正确子女。

  4. 该计划

    OP

1 个答案:

答案 0 :(得分:7)

这是你的堆栈:

while (p->precedence <= q->precedence) q = q->parent;