C++でのプレフィックスからポストフィックスへの変換
この問題では、接頭辞式が与えられます。私たちのタスクは、指定された式の接尾辞変換を出力することです。
プレフィックス 式は、オペランドの前に演算子がある式です。
例:+AB。
接尾辞 式は、式のオペランドの後に演算子がある式です。
例:AB /
接頭辞から接尾辞への変換には、中置への変換は含まれません。
問題を理解するために例を見てみましょう
Input: /+XY+NM Output: XY+NM+/ Explanation: infix -> (X+Y)/(N+M)
この問題を解決するために、最初に後置式全体を逆の順序でトラバースします。そして、処理にスタックデータ構造を使用します。そして、トラバーサルで見つかった要素の場合は、次のようにします
ケース:シンボルがオペランド->スタック内のpush(element)の場合。
ケース:シンボルが演算子->スタックからの2 * pop(要素)の場合。そして、オペランド-オペランド-演算子のシーケンスをプッシュします。
アルゴリズムの実装を示すプログラム
例
#include <iostream> #include <stack> using namespace std; bool isOperator(char x) { switch (x) { case '+': case '-': case '/': case '*': return true; } return false; } string convertToPostfix(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 + op2 + prefix[i]; 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<<"Postfix expression : "<<convertToPostfix(prefix); return 0; }
出力
Prefix expression : *-AB/+CD*XY Postfix expression : AB-CD+XY*/*
-
C++での式ツリーの評価
この問題では、+、-、/、*などの二項演算で構成される式ツリーが与えられます。式ツリーの評価を行ってから、結果を返す必要があります。 表現ツリー は特殊なタイプの二分木であり、各ノードは次のように分散される演算子またはオペランドで構成されます- ツリーのリーフノードは、操作が実行される値です。 非リーフノードは二項演算子で構成されます 実行する操作を示します。 問題を理解するために例を見てみましょう 入力: 出力: 1 説明: 式ツリーのデコード Exp =((5 + 9)/(2 * 7)) =(14/14) = 1 ソリューションアプローチ
-
C++での二分木から二分探索木への変換
二分木 は、ツリーの各ノードが最大2つの子ノードを持つことができる特殊なタイプのツリーです。これらの子ノードは、右の子および左の子と呼ばれます。 単純な二分木は-です 二分探索木(BST) は、次のルールに従う特殊なタイプのツリーです- 左の子ノードの値は常に親よりも小さくなります注 右側の子ノードは、親ノードよりも大きな値を持っています。 すべてのノードが個別に二分探索木を形成します。 二分探索木(BST)の例 − バイナリ検索ツリーは、検索、最小値と最大値の検索などの操作の複雑さを軽減するために作成されます。 ここでは、二分木が与えられており、