バイナリツリーをスレッド化されたバイナリツリーに変換する| C ++でセット1(キューを使用)
このチュートリアルでは、キューデータ構造を使用してバイナリツリーをスレッド化されたバイナリツリーに変換するプログラムについて説明します。
このために、二分木が提供されます。私たちのタスクは、キューデータ構造の助けを借りて、より迅速な順序トラバーサルのためにルートを追加することにより、その特定のバイナリツリーをスレッド化されたバイナリツリーに変換することです。
例
#include <iostream> #include <queue> using namespace std; //node structure for threaded tree struct Node { int key; Node *left, *right; bool isThreaded; }; //putting the inorder pattern into a queue void convert_queue(Node* root, std::queue<Node*>* q){ if (root == NULL) return; if (root->left) convert_queue(root->left, q); q->push(root); if (root->right) convert_queue(root->right, q); } //traversing the queue and making threaded tree void create_threadedtree(Node* root, std::queue<Node*>* q){ if (root == NULL) return; if (root->left) create_threadedtree(root->left, q); q->pop(); if (root->right) create_threadedtree(root->right, q); //if right pointer in NUll, point it to //inorder successor else { root->right = q->front(); root->isThreaded = true; } } //finally taking the tree and converting it into threaded void createThreaded(Node* root){ std::queue<Node*> q; convert_queue(root, &q); create_threadedtree(root, &q); } Node* leftMost(Node* root){ while (root != NULL && root->left != NULL) root = root->left; return root; } //performing inorder traversal of threaded tree void inOrder(Node* root){ if (root == NULL) return; Node* cur = leftMost(root); while (cur != NULL) { cout << cur->key << " "; //if threaded node, move to inorder successor if (cur->isThreaded) cur = cur->right; else cur = leftMost(cur->right); } } Node* newNode(int key){ Node* temp = new Node; temp->left = temp->right = NULL; temp->key = key; return temp; } int main(){ Node* root = newNode(1); root->left = newNode(2); root->right = newNode(3); root->left->left = newNode(4); root->left->right = newNode(5); root->right->left = newNode(6); root->right->right = newNode(7); createThreaded(root); cout << "Traversing threaded tree :\n"; inOrder(root); return 0; }
出力
Traversing threaded tree : 4 2 5 1 6 3 7
-
バイナリツリーをC++のリンクリストにフラット化する
二分木があるとしましょう。リンクリストにフラット化する必要があります。したがって、ツリーが次のような場合- 出力ツリーは-になります これを解決するには、次の手順に従います- ser prev:=null rootを入力として受け取る再帰関数solve()を定義します。 ルートがnullの場合は、を返します。 解決(ルートの権利) 解決(ルートの左側) ルートの右側:=prev、ルートの左側:=null 前:=ルート 理解を深めるために、次の実装を見てみましょう- 例 #include <bits/stdc+
-
C++での二分木レベルの順序トラバーサル
二分木があるとします。レベル順トラバーサルスキームを使用して、このツリーをトラバースする必要があります。したがって、ツリーが次のような場合 トラバーサルシーケンスは次のようになります-[10、5、16、8、15、20、23] これを解決するには、次の手順に従います- ノードを格納するためのキューキューを定義する ルートをキューに挿入します。 queが空でない間は、 item:=キューの最前列にあるアイテム アイテムの価値を印刷する アイテムの左側がnullでない場合は、アイテムの左側をqueに挿入します アイテムの権利がnullでない場合は、アイテムの権利をqueに挿入します