C++での二分木レベルの順序トラバーサル
トラバーサルシーケンスは次のようになります-[10、5、16、8、15、20、23]
これを解決するには、次の手順に従います-
- ノードを格納するためのキューキューを定義する
- ルートをキューに挿入します。
- queが空でない間は、
- item:=キューの最前列にあるアイテム
- アイテムの価値を印刷する
- アイテムの左側がnullでない場合は、アイテムの左側をqueに挿入します
- アイテムの権利がnullでない場合は、アイテムの権利をqueに挿入します
- queからフロント要素を削除
理解を深めるために、次の実装を見てみましょう-
#include<iostream>
#include<queue>
using namespace std;
class node{
public:
int h_left, h_right, bf, value;
node *left, *right;
};
class tree{
private:
node *get_node(int key);
public:
node *root;
tree(){
root = NULL; //set root as NULL at the beginning
}
void levelorder_traversal(node *r);
node *insert_node(node *root, int key);
};
node *tree::get_node(int key){
node *new_node;
new_node = new node; //create a new node dynamically
new_node->h_left = 0; new_node->h_right = 0;
new_node->bf = 0;
new_node->value = key; //store the value from given key
new_node->left = NULL; new_node->right = NULL;
return new_node;
}
void tree::levelorder_traversal(node *root){
queue <node*> que;
node *item;
que.push(root); //insert the root at first
while(!que.empty()){
item = que.front(); //get the element from the front end
cout << item->value << " ";
if(item->left != NULL) //When left child is present, insert into queue
que.push(item->left);
if(item->right != NULL) //When right child is present, insert into queue
que.push(item->right);
que.pop(); //remove the item from queue
}
}
node *tree::insert_node(node *root, int key){
if(root == NULL){
return (get_node(key)); //when tree is empty, create a node as root
}
if(key < root->value){ //when key is smaller than root value, go to the left
root->left = insert_node(root->left, key);
}
else if(key > root->value){ //when key is greater than root value, go to the right
root->right = insert_node(root->right, key);
}
return root; //when key is already present, do not insert it again
}
main(){
node *root;
tree my_tree;
//Insert some keys into the tree.
my_tree.root = my_tree.insert_node(my_tree.root, 10);
my_tree.root = my_tree.insert_node(my_tree.root, 5);
my_tree.root = my_tree.insert_node(my_tree.root, 16);
my_tree.root = my_tree.insert_node(my_tree.root, 20);
my_tree.root = my_tree.insert_node(my_tree.root, 15);
my_tree.root = my_tree.insert_node(my_tree.root, 8);
my_tree.root = my_tree.insert_node(my_tree.root, 23);
cout << "Level-Order Traversal: ";
my_tree.levelorder_traversal(my_tree.root);
} 入力
[10,5,16,null,8,15,20,null,null,null,null,null,null,null,23]
出力
Level-Order Traversal: 10 5 16 8 15 20 23
-
データ構造におけるレベル順序ツリートラバーサル
このセクションでは、二分探索木のレベル順トラバーサル手法について説明します。 このようなツリーが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に設定します キューが空でない間 キュー