Sum of all nodes in a binary tree

• Difficulty Level : Easy
• Last Updated : 03 Sep, 2021

Give an algorithm for finding the sum of all elements in a binary tree.

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

In the above binary tree sum = 106.

The idea is to recursively, call left subtree sum, right subtree sum and add their values to current node’s data.

C++

 `/* Program to print sum of all the elements of a binary tree */``#include ``using` `namespace` `std;` `struct` `Node {``    ``int` `key;``    ``Node* left, *right;``};` `/* utility that allocates a new Node with the given key  */``Node* newNode(``int` `key)``{``    ``Node* node = ``new` `Node;``    ``node->key = key;``    ``node->left = node->right = NULL;``    ``return` `(node);``}` `/* Function to find sum of all the elements*/``int` `addBT(Node* root)``{``    ``if` `(root == NULL)``        ``return` `0;``    ``return` `(root->key + addBT(root->left) + addBT(root->right));``}` `/* Driver program to test above functions*/``int` `main()``{``    ``Node* root = newNode(1);``    ``root->left = newNode(2);``    ``root->right = newNode(3);``    ``root->left->left = newNode(4);``    ``root->left->right = newNode(5);``    ``root->right->left = newNode(6);``    ``root->right->right = newNode(7);``    ``root->right->left->right = newNode(8);` `    ``int` `sum = addBT(root);``    ``cout << ``"Sum of all the elements is: "` `<< sum << endl;` `    ``return` `0;``}`

Java

 `// Java Program to print sum of``// all the elements of a binary tree``class` `GFG``{``static` `class` `Node``{``    ``int` `key;``    ``Node left, right;``}` `/* utility that allocates a new``   ``Node with the given key */``static` `Node newNode(``int` `key)``{``    ``Node node = ``new` `Node();``    ``node.key = key;``    ``node.left = node.right = ``null``;``    ``return` `(node);``}` `/* Function to find sum``   ``of all the elements*/``static` `int` `addBT(Node root)``{``    ``if` `(root == ``null``)``        ``return` `0``;``    ``return` `(root.key + addBT(root.left) +``                       ``addBT(root.right));``}` `// Driver Code``public` `static` `void` `main(String args[])``{``    ``Node root = newNode(``1``);``    ``root.left = newNode(``2``);``    ``root.right = newNode(``3``);``    ``root.left.left = newNode(``4``);``    ``root.left.right = newNode(``5``);``    ``root.right.left = newNode(``6``);``    ``root.right.right = newNode(``7``);``    ``root.right.left.right = newNode(``8``);` `    ``int` `sum = addBT(root);``    ``System.out.println(``"Sum of all the elements is: "` `+ sum);``}``}` `// This code is contributed by Arnab Kundu`

Python3

 `# Python3 Program to print sum of all``# the elements of a binary tree` `# Binary Tree Node` `""" utility that allocates a new Node``with the given key """``class` `newNode:` `    ``# Construct to create a new node``    ``def` `__init__(``self``, key):``        ``self``.key ``=` `key``        ``self``.left ``=` `None``        ``self``.right ``=` `None``        ` `# Function to find sum of all the element``def` `addBT(root):``    ``if` `(root ``=``=` `None``):``        ``return` `0``    ``return` `(root.key ``+` `addBT(root.left) ``+``                       ``addBT(root.right))` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``    ``root ``=` `newNode(``1``)``    ``root.left ``=` `newNode(``2``)``    ``root.right ``=` `newNode(``3``)``    ``root.left.left ``=` `newNode(``4``)``    ``root.left.right ``=` `newNode(``5``)``    ``root.right.left ``=` `newNode(``6``)``    ``root.right.right ``=` `newNode(``7``)``    ``root.right.left.right ``=` `newNode(``8``)` `    ``sum` `=` `addBT(root)` `    ``print``(``"Sum of all the nodes is:"``, ``sum``)` `# This code is contributed by``# Shubham Singh(SHUBHAMSINGH10)`

C#

 `using` `System;` `// C# Program to print sum of``// all the elements of a binary tree``public` `class` `GFG``{``public` `class` `Node``{``    ``public` `int` `key;``    ``public` `Node left, right;``}` `/* utility that allocates a new ``   ``Node with the given key */``public` `static` `Node newNode(``int` `key)``{``    ``Node node = ``new` `Node();``    ``node.key = key;``    ``node.left = node.right = ``null``;``    ``return` `(node);``}` `/* Function to find sum ``   ``of all the elements*/``public` `static` `int` `addBT(Node root)``{``    ``if` `(root == ``null``)``    ``{``        ``return` `0;``    ``}``    ``return` `(root.key + addBT(root.left) + addBT(root.right));``}` `// Driver Code``public` `static` `void` `Main(``string``[] args)``{``    ``Node root = newNode(1);``    ``root.left = newNode(2);``    ``root.right = newNode(3);``    ``root.left.left = newNode(4);``    ``root.left.right = newNode(5);``    ``root.right.left = newNode(6);``    ``root.right.right = newNode(7);``    ``root.right.left.right = newNode(8);` `    ``int` `sum = addBT(root);``    ``Console.WriteLine(``"Sum of all the elements is: "` `+ sum);``}``}` `// This code is contributed by Shrikant13`

Javascript

 ``
Output
`Sum of all the elements is: 36`

Method 2 – Another way to solve this problem is by using Level Order Traversal. Every time when a Node is deleted from the queue, add it to the sum variable.

C++

 `#include ``#include ``using` `namespace` `std;` `struct` `Node {``    ``int` `key;``    ``struct` `Node *left, *right;``};` `// Utility function to create a new node``Node* newNode(``int` `key)``{``    ``Node* temp = ``new` `Node;``    ``temp->key = key;``    ``temp->left = temp->right = NULL;``    ``return` `(temp);``}` `/*Function to find sum of all elements*/``int` `sumBT(Node* root)``{``      ``//sum variable to track the sum of``      ``//all variables.``    ``int` `sum = 0;``  ` `    ``queue q;` `      ``//Pushing the first level.``    ``q.push(root);` `      ``//Pushing elements at each level from``      ``//the tree.``    ``while` `(!q.empty()) {``        ``Node* temp = q.front();``        ``q.pop();``      ` `          ``//After popping each element from queue``          ``//add its data to the sum variable.``        ``sum += temp->key;` `        ``if` `(temp->left) {``            ``q.push(temp->left);``        ``}``        ``if` `(temp->right) {``            ``q.push(temp->right);``        ``}``    ``}``    ``return` `sum;``}` `// Driver program``int` `main()``{``    ``// Let us create Binary Tree shown in above example``    ``Node* root = newNode(1);``    ``root->left = newNode(2);``    ``root->right = newNode(3);``    ``root->left->left = newNode(4);``    ``root->left->right = newNode(5);``    ``root->right->left = newNode(6);``    ``root->right->right = newNode(7);``    ``root->right->left->right = newNode(8);` `    ``cout << ``"Sum of all elements in the binary tree is: "``         ``<< sumBT(root);``}` `//This code is contributed by Sarthak Delori`
Output
`Sum of all elements in the binary tree is: 36`

Time Complexity: O(n)
Auxiliary Space: O(n)

This article is contributed by Prakriti Gupta. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

My Personal Notes arrow_drop_up