Tree with multiple child nodes and next node

Viewed 35828

I want to build a tree with the following characteristics:

  1. Every node can have 1 "next node".
  2. Every node can have multiple child nodes.
  3. The number of child nodes can vary from one node to the other

I was thinking of a struct which looked like this:

struct tree {
  int value;
  struct tree* nextnode;
  struct tree** childnode;
};

The number of children at each node has to be parametrized. I am not sure how to do this. Thanks in advance!

Edit: Let me try to define it using an example: Let us take the starting node. Now, I will define at compile time that there will be 3 NextNodes and each of these NextNodes will have 2 ChildNodes. This is at Depth=0. At Depth = 1 (i.e. for each child node from Depth=0) I specify that there will be 4 NextNodes and for each of these NextNodes there will be 3 ChildNodes and so on. Hope I am able to convey it properly. Please do ask if I am not clear somewhere.

Edit2: Here is a pic:

Here is a pic

3 Answers

Below is method that develops a node with multiple nodes.

Reference: https://www.geeksforgeeks.org/generic-tree-level-order-traversal/

/* Let us create below tree 
*            10 
*    / / \ \ 
*    2 34 56 100 
*    / \         | / | \ 
*    77 88   1 7 8 9 
*/



 // CPP program to do level order traversal 
 // of a generic tree 

 #include <bits/stdc++.h> 
 using namespace std; 

 // Represents a node of an n-ary tree 

 struct Node 
 { 
   int key; 
   vector<Node *>child; 
 }; 

// Utility function to create a new tree node 

 Node *newNode(int key) 
 { 
    Node *temp = new Node; 
    temp->key = key; 
    return temp; 
 } 


// Driver program 

int main() 
{ 
/* Let us create below tree 
*            10 
*    / / \ \ 
*    2 34 56 100 
*    / \         | / | \ 
*    77 88   1 7 8 9 
*/
Node *root = newNode(10); 
(root->child).push_back(newNode(2)); 
(root->child).push_back(newNode(34)); 
(root->child).push_back(newNode(56)); 
(root->child).push_back(newNode(100)); 
(root->child[0]->child).push_back(newNode(77)); 
(root->child[0]->child).push_back(newNode(88)); 
(root->child[2]->child).push_back(newNode(1)); 
(root->child[3]->child).push_back(newNode(7)); 
(root->child[3]->child).push_back(newNode(8)); 
(root->child[3]->child).push_back(newNode(9)); 


return 0; 
} 
Related