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

与えられた二分木のプレオーダー非再帰的トラバーサルを実行するC++プログラム


ツリートラバーサルは、グラフトラバーサルの一種です。これには、ツリー内の各ノードを1回だけチェックまたは印刷することが含まれます。二分探索木のプレオーダートラバーサルでは、ツリー内の各ノードに順番に(ルート、左、右)アクセスします。

二分木のプレオーダートラバーサルの例は次のとおりです。

二分木は次のように与えられます。

与えられた二分木のプレオーダー非再帰的トラバーサルを実行するC++プログラム

プレオーダートラバーサルは次のとおりです:5 3 2 4 8 9

事前注文の非再帰的トラバーサルを実行するプログラムは次のとおりです。

#include<iostream>
#include <stack>
using namespace std;
struct node {
   int data;
   struct node *left;
   struct node *right;
};
struct node *createNode(int val) {
   struct node *temp = (struct node *)malloc(sizeof(struct node));
   temp→data = val;
   temp→left = temp→right = NULL;
   return temp;
}
void preorder(struct node *root) {
   if (root == NULL)
   return;
   stack<node *> nodeStack;
   nodeStack.push(root);
   while (nodeStack.empty() == false) {
      struct node *temp_node = nodeStack.top();
      cout<< temp_node->data <<" ";
      nodeStack.pop();
      if (temp_node→right)
      nodeStack.push(temp_node->right);
      if (temp_node→left)
      nodeStack.push(temp_node->left);
   }
}
struct node* insertNode(struct node* node, int val) {
   if (node == NULL) return createNode(val);
   if (val < node→data)
   node→left = insertNode(node→left, val);
   else if (val > node→data)
   node→right = insertNode(node→right, val);
   return node;
}
int main() {
   struct node *root = NULL;
   root = insertNode(root, 5);
   insertNode(root, 8);
   insertNode(root, 3);
   insertNode(root, 2);
   insertNode(root, 6);
   insertNode(root, 9);
   insertNode(root, 4);
   cout<<"Pre-Order traversal of the Binary Search Tree is: ";
   preorder(root);
}

出力

Pre-Order traversal of the Binary Search Tree is: 5 3 2 4 8 6 9

上記のプログラムでは、構造ノードがツリーのノードを作成します。この構造体は、構造体ノードタイプのポインターを含むため、自己参照構造体です。この構造を以下に示します。

struct node {
   int data;
   struct node *left;
   struct node *right;
};

関数createNode()は、ノードtempを作成し、mallocを使用してそれにメモリを割り当てます。データ値valはtempのデータに格納されます。 NULLは、tempの左右のポインタに格納されます。これは、次のコードスニペットによって示されます。

struct node *createNode(int val) {
   struct node *temp = (struct node *)malloc(sizeof(struct node));
   temp→data = val;
   temp→left = temp→right = NULL;
   return temp;
}

関数preorder()は、スタックを使用してツリーの要素をpreorderで出力します。まず、ルートノードがスタックに挿入されます。スタックが空でなくなるまで実行されるwhileループが開始されます。最初にスタックのトップノード要素のデータが表示され、次にノードがポップされます。次に、上記のノードの左右のノードがスタックにプッシュされます。

この関数は、次のコードスニペットを使用して示されています。

void preorder(struct node *root) {
   if (root == NULL)
   return;
   stack<node *> nodeStack;
   nodeStack.push(root);
   while (nodeStack.empty() == false) {
      struct node *temp_node = nodeStack.top();
      cout<< temp_node->data <<" ";
      nodeStack.pop();
      if (temp_node→right)
      nodeStack.push(temp_node→right);
      if (temp_node→left)
      nodeStack.push(temp_node→left);
   }
}

関数insertNode()は、必要な値をバイナリツリーの正しい位置に挿入します。ノードがNULLの場合、createNodeが呼び出されます。それ以外の場合、ノードの正しい位置はツリー内にあります。これは、次のコードスニペットで確認できます。

struct node* insertNode(struct node* node, int val) {
   if (node == NULL) return createNode(val);
   if (val < node→data)
   node→left = insertNode(node→left, val);
   else if (val > node→data)
   node->right = insertNode(node→right, val);
   return node;
}

main()関数では、ルートノードは最初にNULLとして定義されます。次に、必要な値を持つすべてのノードが二分探索木に挿入されます。これを以下に示します。

struct node *root = NULL;
root = insertNode(root, 5);
insertNode(root, 8);
insertNode(root, 3);
insertNode(root, 2);
insertNode(root, 6);
insertNode(root, 9);
insertNode(root, 4);

最後に、ツリーのルートノードを使用して関数preorder()が呼び出され、すべてのツリー値がpreorderで表示されます。これを以下に示します。

cout<<"Pre-Order traversal of the Binary Search Tree is: ";
preorder(root);

  1. 与えられた二分木の順序の再帰的走査を実行するC++プログラム

    ツリートラバーサルは、グラフトラバーサルの一種です。これには、ツリー内の各ノードを1回だけチェックまたは印刷することが含まれます。二分探索木の順序どおりの走査には、ツリー内の各ノードを順番に(左、根、右)訪問することが含まれます。 二分木のインオーダートラバーサルの例は次のとおりです。 二分木は次のように与えられます。 インオーダートラバーサルは次のとおりです:1 4 5 6 8 順序どおりの再帰的走査を実行するプログラムは次のとおりです。 例 #include<iostream> using namespace std; struct node {  

  2. 与えられた二分木のプレオーダー再帰トラバーサルを実行するC++プログラム

    ツリートラバーサルは、グラフトラバーサルの一種です。これには、ツリー内の各ノードを1回だけチェックまたは印刷することが含まれます。二分探索木のプレオーダートラバーサルでは、ツリー内の各ノードに順番に(ルート、左、右)アクセスします。 二分木のプレオーダートラバーサルの例は次のとおりです。 二分木は次のように与えられます。 プレオーダートラバーサルは次のとおりです:6 4 1 5 8 プレオーダー再帰トラバーサルを実行するプログラムは次のとおりです。 例 #include<iostream> using namespace std; struct node { &nb