C++でのプレフィックスからインフィックスへの変換
この問題では、接頭辞式が与えられます。私たちのタスクは、指定された式のインフィックス変換を出力することです。
プレフィックス式は、オペランドの前に演算子がある式です。
例:+AB。
中置式は、オペランド間に演算子がある式です。
例:A + B
中置式は人間が理解できる情報ですが、コンピューターは前置式または後置式(通常は後置)を計算します。
問題を理解するために例を見てみましょう
Input: prefix : /+LM/NX Output: infix : (L+M) / (N/X)
この問題を解決するために、スタックデータ構造を使用します。式の逆の順序でプレフィックス式をトラバースします。そして、式の各要素について、これらのケースをチェックします。
要素がオペランドの場合->スタック内のpush(element)。
要素がoperator->2Xpop(topofstack)の場合、文字列=オペランド-演算子-オペランドとして順番にプッシュします。
最後に、トラバーサル後、スタックの一番上に中置変換である文字列が含まれ、それを出力します。
ソリューションの実装を示すプログラム
例
#include <iostream> #include <stack> using namespace std; bool isOperator(char element) { switch (element) { case '+': case '-': case '/': case '*': return true; } return false; } string convertToInfix(string prefix) { stack<string> expression; int length = prefix.size(); for (int i = length - 1; i >= 0; i--) { if (isOperator(prefix[i])) { string op1 = expression.top(); expression.pop(); string op2 = expression.top(); expression.pop(); string temp = "{"+op1+prefix[i]+op2+"}"; expression.push(temp); } else { expression.push(string(1, prefix[i])); } } return expression.top(); } int main() { string prefix = "*-AB/+CD*XY"; cout<<"Prefix expression : "<<prefix<<endl; cout<<"Infix expression : " <<convertToInfix(prefix); return 0; }
出力
Prefix expression : *-AB/+CD*XY Infix expression : {{A-B}*{{C+D}/{X*Y}}}
-
C++での式ツリーの評価
この問題では、+、-、/、*などの二項演算で構成される式ツリーが与えられます。式ツリーの評価を行ってから、結果を返す必要があります。 表現ツリー は特殊なタイプの二分木であり、各ノードは次のように分散される演算子またはオペランドで構成されます- ツリーのリーフノードは、操作が実行される値です。 非リーフノードは二項演算子で構成されます 実行する操作を示します。 問題を理解するために例を見てみましょう 入力: 出力: 1 説明: 式ツリーのデコード Exp =((5 + 9)/(2 * 7)) =(14/14) = 1 ソリューションアプローチ
-
C++での二分木から二分探索木への変換
二分木 は、ツリーの各ノードが最大2つの子ノードを持つことができる特殊なタイプのツリーです。これらの子ノードは、右の子および左の子と呼ばれます。 単純な二分木は-です 二分探索木(BST) は、次のルールに従う特殊なタイプのツリーです- 左の子ノードの値は常に親よりも小さくなります注 右側の子ノードは、親ノードよりも大きな値を持っています。 すべてのノードが個別に二分探索木を形成します。 二分探索木(BST)の例 − バイナリ検索ツリーは、検索、最小値と最大値の検索などの操作の複雑さを軽減するために作成されます。 ここでは、二分木が与えられており、