Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 63 additions & 0 deletions generic_tree/traversal/level_order.cpp
Original file line number Diff line number Diff line change
@@ -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 <print>
#include <queue>
#include <vector>
struct Node{
int data;
std::vector<Node*>children;
Node(int val): data(val){};
};

Node* FindNode(Node* root,int val){
//pakai queue untuk search
if(!root){
return nullptr;
}
std::queue<Node*>q;
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::queue<Node*>q;
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;
}