Open In App
Related Articles

# Sum of all elements of N-ary Tree

Given an N-ary tree, find sum of all elements in it.

Example :

```Input : Above tree
Output : Sum is 536```

Approach : The approach used is similar to Level Order traversal in a binary tree. Start by pushing the root node in the queue. And for each node, while popping it from queue, add the value of this node in the sum variable and push the children of the popped element in the queue. In case of a generic tree store child nodes in a vector. Thus, put all elements of the vector in the queue.

Below is the implementation of the above idea :

## C++

 `// C++ program to find sum of all``// elements in generic tree``#include ``using` `namespace` `std;` `// Represents a node of an n-ary tree``struct` `Node {``    ``int` `key;``    ``vector child;``};` `// Utility function to create a new tree node``Node* newNode(``int` `key)``{``    ``Node* temp = ``new` `Node;``    ``temp->key = key;``    ``return` `temp;``}` `// Function to compute the sum``// of all elements in generic tree``int` `sumNodes(Node* root)``{``    ``// initialize the sum variable``    ``int` `sum = 0;` `    ``if` `(root == NULL)``        ``return` `0;` `    ``// Creating a queue and pushing the root``    ``queue q;``    ``q.push(root);` `    ``while` `(!q.empty()) {``        ``int` `n = q.size();` `        ``// If this node has children``        ``while` `(n > 0) {` `            ``// Dequeue an item from queue and``            ``// add it to variable "sum"``            ``Node* p = q.front();``            ``q.pop();``            ``sum += p->key;` `            ``// Enqueue all children of the dequeued item``            ``for` `(``int` `i = 0; i < p->child.size(); i++)``                ``q.push(p->child[i]);``            ``n--;``        ``}``    ``}``    ``return` `sum;``}` `// Driver program``int` `main()``{``    ``// Creating a generic tree``    ``Node* root = newNode(20);``    ``(root->child).push_back(newNode(2));``    ``(root->child).push_back(newNode(34));``    ``(root->child).push_back(newNode(50));``    ``(root->child).push_back(newNode(60));``    ``(root->child).push_back(newNode(70));``    ``(root->child[0]->child).push_back(newNode(15));``    ``(root->child[0]->child).push_back(newNode(20));``    ``(root->child[1]->child).push_back(newNode(30));``    ``(root->child[2]->child).push_back(newNode(40));``    ``(root->child[2]->child).push_back(newNode(100));``    ``(root->child[2]->child).push_back(newNode(20));``    ``(root->child[0]->child[1]->child).push_back(newNode(25));``    ``(root->child[0]->child[1]->child).push_back(newNode(50));` `    ``cout << sumNodes(root) << endl;` `    ``return` `0;``}`

## Java

 `// Java program to find sum of all``// elements in generic tree``import` `java.util.*;` `class` `GFG``{` `// Represents a node of an n-ary tree``static` `class` `Node``{``    ``int` `key;``    ``Vector child;``};` `// Utility function to create a new tree node``static` `Node newNode(``int` `key)``{``    ``Node temp = ``new` `Node();``    ``temp.key = key;``    ``temp.child = ``new` `Vector<>();``    ``return` `temp;``}` `// Function to compute the sum``// of all elements in generic tree``static` `int` `sumNodes(Node root)``{``    ``// initialize the sum variable``    ``int` `sum = ``0``;` `    ``if` `(root == ``null``)``        ``return` `0``;` `    ``// Creating a queue and pushing the root``    ``Queue q = ``new` `LinkedList<>();``    ``q.add(root);` `    ``while` `(!q.isEmpty())``    ``{``        ``int` `n = q.size();` `        ``// If this node has children``        ``while` `(n > ``0``)``        ``{` `            ``// Dequeue an item from queue and``            ``// add it to variable "sum"``            ``Node p = q.peek();``            ``q.remove();``            ``sum += p.key;` `            ``// Enqueue all children of the dequeued item``            ``for` `(``int` `i = ``0``; i < p.child.size(); i++)``                ``q.add(p.child.get(i));``            ``n--;``        ``}``    ``}``    ``return` `sum;``}` `// Driver program``public` `static` `void` `main(String[] args)``{``    ``// Creating a generic tree``    ``Node root = newNode(``20``);``    ``(root.child).add(newNode(``2``));``    ``(root.child).add(newNode(``34``));``    ``(root.child).add(newNode(``50``));``    ``(root.child).add(newNode(``60``));``    ``(root.child).add(newNode(``70``));``    ``(root.child.get(``0``).child).add(newNode(``15``));``    ``(root.child.get(``0``).child).add(newNode(``20``));``    ``(root.child.get(``1``).child).add(newNode(``30``));``    ``(root.child.get(``2``).child).add(newNode(``40``));``    ``(root.child.get(``2``).child).add(newNode(``100``));``    ``(root.child.get(``2``).child).add(newNode(``20``));``    ``(root.child.get(``0``).child.get(``1``).child).add(newNode(``25``));``    ``(root.child.get(``0``).child.get(``1``).child).add(newNode(``50``));` `    ``System.out.print(sumNodes(root) +``"\n"``);``}``}` `// This code is contributed by 29AjayKumar`

## Python3

 `# Python3 program to find sum of all``# elements in generic tree` `# Represents a node of an n-ary tree``class` `Node:``    ``def` `__init__(``self``):``        ``self``.key ``=` `0``        ``self``.child ``=` `[]` `# Utility function to create a new tree node``def` `newNode(key):``    ``temp ``=` `Node()``    ``temp.key ``=` `key``    ``temp.child ``=` `[]``    ``return` `temp`` ` `# Function to compute the sum``# of all elements in generic tree``def` `sumNodes(root):``    ``# initialize the sum variable``    ``Sum` `=` `0`` ` `    ``if` `root ``=``=` `None``:``        ``return` `0`` ` `    ``# Creating a queue and pushing the root``    ``q ``=` `[]``    ``q.append(root)`` ` `    ``while` `len``(q) !``=` `0``:``        ``n ``=` `len``(q)`` ` `        ``# If this node has children``        ``while` `n > ``0``:``            ``# Dequeue an item from queue and``            ``# add it to variable "sum"``            ``p ``=` `q[``0``]``            ``q.pop(``0``)``            ``Sum` `+``=` `p.key`` ` `            ``# push all children of the dequeued item``            ``for` `i ``in` `range``(``len``(p.child)):``                ``q.append(p.child[i])``            ``n``-``=``1``    ``return` `Sum` `# Creating a generic tree``root ``=` `newNode(``20``)``(root.child).append(newNode(``2``))``(root.child).append(newNode(``34``))``(root.child).append(newNode(``50``))``(root.child).append(newNode(``60``))``(root.child).append(newNode(``70``))``(root.child[``0``].child).append(newNode(``15``))``(root.child[``0``].child).append(newNode(``20``))``(root.child[``1``].child).append(newNode(``30``))``(root.child[``2``].child).append(newNode(``40``))``(root.child[``2``].child).append(newNode(``100``))``(root.child[``2``].child).append(newNode(``20``))``(root.child[``0``].child[``1``].child).append(newNode(``25``))``(root.child[``0``].child[``1``].child).append(newNode(``50``))``print``(sumNodes(root))` `# This code is contributed by divyeshrabadiya07.`

## C#

 `    ` `// C# program to find sum of all``// elements in generic tree``using` `System;``using` `System.Collections.Generic;` `class` `GFG``{` `// Represents a node of an n-ary tree``class` `Node``{``    ``public` `int` `key;``    ``public` `List child;``};` `// Utility function to create a new tree node``static` `Node newNode(``int` `key)``{``    ``Node temp = ``new` `Node();``    ``temp.key = key;``    ``temp.child = ``new` `List();``    ``return` `temp;``}` `// Function to compute the sum``// of all elements in generic tree``static` `int` `sumNodes(Node root)``{``    ``// initialize the sum variable``    ``int` `sum = 0;` `    ``if` `(root == ``null``)``        ``return` `0;` `    ``// Creating a queue and pushing the root``    ``Queue q = ``new` `Queue();``    ``q.Enqueue(root);` `    ``while` `(q.Count != 0)``    ``{``        ``int` `n = q.Count;` `        ``// If this node has children``        ``while` `(n > 0)``        ``{` `            ``// Dequeue an item from queue and``            ``// add it to variable "sum"``            ``Node p = q.Peek();``            ``q.Dequeue();``            ``sum += p.key;` `            ``// Enqueue all children of the dequeued item``            ``for` `(``int` `i = 0; i < p.child.Count; i++)``                ``q.Enqueue(p.child[i]);``            ``n--;``        ``}``    ``}``    ``return` `sum;``}` `// Driver program``public` `static` `void` `Main(String[] args)``{``    ``// Creating a generic tree``    ``Node root = newNode(20);``    ``(root.child).Add(newNode(2));``    ``(root.child).Add(newNode(34));``    ``(root.child).Add(newNode(50));``    ``(root.child).Add(newNode(60));``    ``(root.child).Add(newNode(70));``    ``(root.child[0].child).Add(newNode(15));``    ``(root.child[0].child).Add(newNode(20));``    ``(root.child[1].child).Add(newNode(30));``    ``(root.child[2].child).Add(newNode(40));``    ``(root.child[2].child).Add(newNode(100));``    ``(root.child[2].child).Add(newNode(20));``    ``(root.child[0].child[1].child).Add(newNode(25));``    ``(root.child[0].child[1].child).Add(newNode(50));` `    ``Console.Write(sumNodes(root) +``"\n"``);``}``}` `// This code is contributed by PrinciRaj1992`

## Javascript

 ``

Output

```536
```

Time Complexity: O(N), where N is the number of nodes in tree.
Auxiliary Space: O(N), where N is the number of nodes in tree.