C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

式ツリーアルゴリズムを実装するC++プログラム


式ツリーは基本的に、式を表すために使用されるバイナリです。式ツリーでは、内部ノードは演算子に対応し、各リーフノードはオペランドに対応します。これは、後置式を入力として受け取り、順番にトラバースされる対応する式ツリーを生成する式ツリーアルゴリズムを実装するためのC++プログラムです。

アルゴリズム

Begin
   function construct_expression_tree():
      Flag = 1 when it is operand.
      Flag = -1 when it is operator.
      S = suffix[0] means read the first operand from the expression.
   For i = 0 and until s != 0
      Check symbol is operand or operator.
      Call function void inorder() for inorder traversal.
      Print the results.
      Increment i
End.

サンプルコード

#include <iostream>
using namespace std;

struct n//node declaration {
   char d;
   n *l;
   n *r;
};
char pf[50];
int top = -1;
n *a[50];
int r(char inputch)//check the symbol whether it is an operator or an operand. {
   if (inputch == '+' || inputch == '-' || inputch == '*' || inputch == '/')
      return (-1);
   else if (inputch >= 'A' || inputch <= 'Z')
      return (1);
   else if (inputch >= 'a' || inputch <= 'z')
      return (1);
   else
      return (-100);
}
void push(n *tree)//push elements in stack {
   top++;
   a[top] = tree;
}
n *pop() {
   top--;
   return (a[top + 1]);
}
void construct_expression_tree(char *suffix) {
   char s;
   n *newl, *p1, *p2;
   int flag;
   s = suffix[0];
   for (int i = 1; s!= 0; i++) {
      flag = r(s);
      if (flag == 1) {
         newl = new n;
         newl->d = s;
         newl->l = NULL;
         newl->r = NULL;
         push(newl);
      } else {
         p1 = pop();
         p2 = pop();
         newl = new n;
         newl->d = s;
         newl->l = p2;
         newl->r = p1;
         push(newl);
      }
      s = suffix[i];
   }
}

void inOrder(n *tree)//perform inorder traversal {
   if (tree != NULL) {
      inOrder(tree->l);
      cout << tree->d;
      inOrder(tree->r);
   }
}

int main(int argc, char **argv) {
   cout << "Enter Postfix Expression : ";
   cin >>pf;
   construct_expression_tree(pf);
   cout << "\nInfix Expression : ";
   inOrder(a[0]);
   return 0;
}

出力

Enter Postfix Expression : 762*+6+
Infix Expression : 7+6*2+6

  1. AVLツリーを実装するためのC++プログラム

    AVLツリーは自己平衡二分探索木であり、左右のサブツリーの高さの差がすべてのノードで複数になることはありません。 ツリーの回転は、AVLツリーの要素の順序を妨げることなく構造を変更する操作です。ツリー内で1つのノードを上に移動し、1つのノードを下に移動します。これは、ツリーの形状を変更したり、小さいサブツリーを下に移動したり、大きいサブツリーを上に移動したりして高さを低くしたりするために使用され、多くのツリー操作のパフォーマンスが向上します。回転の方向は、木のノードが移動する側に依存しますが、他の人は、どの子がルートの場所をとるかに依存すると言います。これは、AVLツリーを実装するためのC+

  2. 補間検索アルゴリズムを実装するC++プログラム

    二分探索手法の場合、リストは等しい部分に分割されます。補間検索手法の場合、プロシージャは補間式を使用して正確な位置を見つけようとします。推定位置を見つけた後、その位置を使用してリストを分離できます。毎回正確な位置を見つけようとするため、検索時間が短縮されます。この手法では、アイテムが均一に分散されている場合、アイテムを簡単に見つけることができます。 補間検索手法の複雑さ 時間計算量:O(log 2 (log 2 n))平均的な場合、O(n)は最悪の場合(アイテムが指数関数的に分散される場合) スペースの複雑さ:O(1) Input − A sorted li