請編寫程式將表示式樹按中綴表示式輸出,並填加必要的括號,要求括號不能冗餘,即保證正確運算次序所需的最少括號。如a * (b + c)和a + (b - c)中的括號是必要的,而a + (b * c)的括號則是冗餘的。假定表示式樹中的運算均為二元運算,只涉及加、減、乘、除運算。
輸入為一行字串,表示帶空指標資訊的表示式樹先根序列,空指標資訊用#表示,運算元為a-z的小寫字母,運算子為+、-、*、/。
輸出為一行字串,表示填加必要括號後的中綴表示式。
輸入樣例1:
輸出樣例1:
輸入樣例2:
輸出樣例2:
本題重在思路,只要想好在什麼地方加括號即可
#include #include //節點結構體
typedef struct node
tree;
//先根建樹,空節點存'#'
tree *creat_tree()
} else
return temp;
}/*補括號函式,主要思想為若節點'*'(或'/')的子節點為'+'(或'-')時,加括號將以'+'(或'-')節點為根的子樹括起來*/
void bukuohao(struct node *p)
p=p->left;
}p=q->left;
for(;;)
p=p->right;}}
//判斷'*'(或'/')的右子樹
else if(p->right->data=='+'||p->right->data=='-')
p=p->right;
}p=q->right;
for(;;)
p=p->left;
}}p=q;
if(p->right->data!='#')
bukuohao(p->right);
}//中序遍歷二叉樹並輸出個節點的值
void zhongxu(struct node *p)
}//主函式
C 表示式樹
在使用 ef 開中我們經常使用 xx.where p p.name 張三 查詢資料,之把能這樣是因為 ef 框架會把這些c 轉成sql語句,其中主要用到的就是表示式樹,今天就來學習一下表示式樹。func func a,b a b expressionint,int,int expression a,...
C 表示式樹Expression
表示式相加 常量表示式 expression firstarg expression.constant 2 expression secondarg expression.constant 4 相加 expression addexpression expression.add firstarg,s...
C語言 逗號表示式
c語言提供一種特殊的運算子 逗號運算子。用它將兩個表示式連線起來。如 3 5,6 8 稱為逗號表示式,又稱為 順序求值運算子 逗號表示式的一般形式為 表示式1,表示式2 逗號表示式的求解過程是 先求解表示式1,再求解表示式2。整個逗號表示式的值是表示式2的值。例如,上面的逗號表示式 3 5,6 8 ...