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