C++で単一のキューを使用したツリーのジグザグレベルの順序トラバーサル
この問題では、二分木が与えられます。私たちのタスクは、ツリーのジグザグレベルの順序トラバーサルを印刷することです。このトラバーサルでは、単一のキューのみを使用します。
問題を理解するために例を見てみましょう
出力 −
3 1 7 2 8 9 5
単一のキューを使用してこの問題を解決するために、キューと方向フラグとともに追加の分離フラグを訴えます。
次に、ツリーをレベルごとにトラバースし、ルート要素を挿入します。次に、キューのすべての要素に対して、その子ノードをキューに挿入します。 NULLが検出された場合、方向を確認してから、指定された方向に要素をトラバースします。次に、最後のNULLにアクセスするまで挿入を続けます。
例
#include <bits/stdc++.h> using namespace std; struct Node { int data; struct Node *left, *right; }; struct Node* insertNode(int data) { struct Node* node = new struct Node; node->data = data; node->left = node->right = NULL; return (node); } void zigZagTraversal(struct Node* root, int n){ struct Node* queue[2 * n]; int top = -1; int front = 1; queue[++top] = NULL; queue[++top] = root; queue[++top] = NULL; int prevFront = 0, count = 1; while (1) { struct Node* curr = queue[front]; if (curr == NULL) { if (front == top) break; else { if (count % 2 == 0) { for (int i = prevFront + 1; i < front; i++) cout<<queue[i]->data<<"\t"; } else { for (int i = front - 1; i > prevFront; i--) cout<<queue[i]->data<<"\t"; } prevFront = front; count++; front++; queue[++top] = NULL; continue; } } if (curr->left != NULL) queue[++top] = curr->left; if (curr->right != NULL) queue[++top] = curr->right; front++; } if (count % 2 == 0) { for (int i = prevFront + 1; i < top; i++) cout<<queue[i]->data<<"\t"; } else { for (int i = top - 1; i > prevFront; i--) cout<<queue[i]->data<<"\t"; } } int main() { struct Node* root = insertNode(3); root->left = insertNode(1); root->right = insertNode(7); root->left->left = insertNode(5); root->left->right = insertNode(9); root->right->left = insertNode(8); root->right->right = insertNode(2); cout<<"Zig Zag traversal of the tree is :\n"; zigZagTraversal(root, 7); return 0; }
出力
Zig Zag traversal of the tree is : 3 1 7 2 8 9 5
-
データ構造におけるレベル順序ツリートラバーサル
このセクションでは、二分探索木のレベル順トラバーサル手法について説明します。 このようなツリーが1つあるとします- トラバーサルシーケンスは次のようになります:10、5、16、8、15、20、23 アルゴリズム levelOrderTraverse(root): Begin define queue que to store nodes insert root into the que. while que is not empty, do item := ite
-
Pythonでの二分木ジグザグレベルの順序トラバーサル
二分木があるとしましょう。ジグザグレベルの順序トラバーサルを見つける必要があります。したがって、最初の行については、左から右にスキャンし、次に2番目の行から右から左にスキャンし、次に再び左から右にスキャンします。したがって、ツリーが次のような場合- トラバーサルシーケンスは[[3]、[20,9]、[15,7]]になります これを解決するには、次の手順に従います- ツリーが空の場合は、空のリストを返します queue:=キューを作成し、ルートをキューに挿入し、2つの空のリストresとres2を作成し、フラグをTrueに設定します キューが空でない間 キュー