给定一个像4 * 5 + 9这样的表达式,我们如何构建一个表达式树呢? 我正在工作门户网站上阅读这个面试问题并想到尝试它。
问题是,如果将其括起来,那么构建
会更容易一些例如((4 * 5)+ 9) 然后打开左括号,我们就知道我们必须向左走,其中数字将是叶节点,运算符将是父节点,一旦我们点击右括号,我们将返回并上升到该级别。
我们如何构建这样的表达式树?
答案 0 :(得分:2)
您可以从BNF开始,然后继续前往树。 如果是带括号的简单表达式,那将是
EXPR ::= TERM [ ('+'|'-') TERM ]
TERM ::= MUL [ ('*'|'/') MUL ]
MUL ::= NUMBER | '(' EXPR ')'
NUMBER ::= DIGIT [ DIGIT ]
DIGIT ::= '0' ... '9'
只需编写解析每个部分的函数(或使用boost :: spirit),你就会得到你的树