最近我写了一个算法convert an infix expression to a binary tree without using any stack
。但是,当我在网上搜索时,我发现那里描述的算法都基于堆栈(或递归)。
所以我开始担心我的算法的正确性,尽管我无法证明 它还不正确。
的问题 的
你知道技术上是否可以在没有任何堆栈的情况下进行转换?我的算法错了吗?
简短说明
它基于:
中缀表达式中的操作数属于其前面的运算符的右子节点,或者属于它后面的运算符的左子节点。
如果运算符OP2
的优先级高于其前一个运算符OP1
,则前一个操作数x
将成为OP2
的左子项,{{1}成为OP2
的正确孩子。
如果运算符OP1
的优先级低于其前一个运算符OP2
,则前一个操作数OP1
将成为x
的正确子级。从OP1
向上移动树,将OP1
的每个祖先的优先级与OP1
的优先级进行比较,直到OP2
< = ancestor OP2
。然后OP
成为OP2
的正确子女。
该计划
OP
答案 0 :(得分:7)
这是你的堆栈:
while (p->precedence <= q->precedence) q = q->parent;