From 9e244de635be821237517181879ce7e389521fdd Mon Sep 17 00:00:00 2001 From: yusuf601 Date: Mon, 24 Nov 2025 21:16:22 +0700 Subject: [PATCH] feat: impelemnt traversal level order on generic tree --- generic_tree/traversal/level_order.cpp | 63 ++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 generic_tree/traversal/level_order.cpp diff --git a/generic_tree/traversal/level_order.cpp b/generic_tree/traversal/level_order.cpp new file mode 100644 index 0000000..c410ae2 --- /dev/null +++ b/generic_tree/traversal/level_order.cpp @@ -0,0 +1,63 @@ +/** + * @file level_order.cpp code untukk mengimplementasikan level_order traversal pada generic tree + * @brief level order traversal adalah tipe traversal yang mengunjungi node tiap level,menggunakan queue untuk menyimpan node + * yang dikunjungi + * +*/ +#include +#include +#include +struct Node{ + int data; + std::vectorchildren; + Node(int val): data(val){}; +}; + +Node* FindNode(Node* root,int val){ + //pakai queue untuk search + if(!root){ + return nullptr; + } + std::queueq; + q.push(root); + while(!q.empty()){ + Node* node = q.front();q.pop(); + if(node->data == val){ + return node; + } + for(auto child: node->children){ + q.push(child); + } + } + return nullptr; +} + +bool insert(Node* root,int parent,int val){ + Node* parentNode = FindNode(root,parent); + if(!parentNode){ + return false; + } + Node* new_node = new Node(val); + //chaining karena tidak ada parent node + parentNode->children.push_back(new_node); + return true; +} + +void level_order(Node* root){ + if(!root){return;} + std::queueq; + q.push(root); + while(!q.empty()){ + Node* node = q.front(); + q.pop(); + std::print("{} ",node->data); + for(auto child: node->children){ + q.push(child); + } + } +} + +int main(){ + Node* root; + return 0; +}