【发布时间】:2016-11-17 06:31:39
【问题描述】:
现在我有一个简单的打印算法,可以打印完美的括号。问题是,括号并不总是必需的,我需要弄清楚如何在不需要时不打印它们。
我目前的功能:
void printIn(Node* t){
if(t!= NULL) {
if(isleafNode(t))
cout << t->element;
else {
cout << "(";
printIn(t->left);
cout << t->data;
printIn(t->right);
cout << ")";
}
}
这里的问题是一些后缀表达式,比如 2 50 + 8 + 可以在中缀中打印为 2 + 50 + 8 instad of ((2 + 50) + 8))
这是一个后缀图表,用于中缀它的外观。我的只是在整个外部加上括号,无论如何都添加到所有添加中。
4 50 6 + + 4 + ( 50 + 6 )
4 50 + 6 + 4 + 50 + 6
4 50 + 6 2 * + 4 + 50 + 6 * 2
4 50 6 + + 2 * ( 4 + ( 50 + 6 ) ) * 2
a b + c d e + * * ( a + b ) * ( c * ( d + e ) )
这是我的外观图表:
4 50 6 + + ( 4 + ( 50 + 6 ))
4 50 + 6 + ( ( 4 + 50 ) + 6)
4 50 + 6 2 * + ( ( 4 + 50 ) + ( 6 * 2 ) )
4 50 6 + + 2 * ( ( 4 + ( 50 + 6 ) ) * 2 )
a b + c d e + * * ( ( a + b) * ( c * ( d + e ) ) )
如何修正我的算法以消除多余的括号? p 请记住,我确实有一个 getPrecedence(string) 函数,它为高优先级(* 或 /)返回 1,为低优先级(+ 或 -)返回 0
【问题讨论】:
-
是否为表达式提供附加信息以使括号不是一个选项?
-
@SenselessCoder 'Additional information"' 例如什么?所需的一切都已在后缀表达式和表达式树中提供。
标签: c++ tree binary-tree expression-trees