Given a binary tree, where each node is having an integer value. Write a function that accept the root of this tree and returns the sum of all the nodes in the tree. The sum of all the nodes in the
Solution:
Like other Binary tree questions, this one also use recursion. The signature of our function is:
int sumOfNodes(Node* root);
This function computes the sum of all the node of the binary tree pointer to by root and return that sum. The function can be defined recursively:
Sum of all nodes = Sum of all nodes in left subtree + sum of all nodes in right subtree + data at root
Now we just need to put the terminating condition to this recursion and the final code of function looks like below:
int sumOfNodes(Node* root) { if(root == NULL) { return 0; } else { return sumOfNodes(root->left) + sumOfNodes(root->right) + root->data; } }
Above implementation is in C++. Below is the sample code in Java with such a function
// DEFINITION OF NODE OF A BINARY TREE class Node { public int data; public Node left; public Node right; public Node(int x){ data = x; left = right= null; } } // CLASS BINARY TREE. THERE CAN BE MULTIPLE FUNCTION IN THIS CLASS class BinaryTree { Node root; BinaryTree(){ root= null; } //Main function that computes the sum of function private int sumOfNodes(Node r) { if(r == null){ return 0; } return r.data + sumOfNodes(r.left) + sumOfNodes(r.right); } // WRAPPER FUNCTION TO CALL THE ABOVE RECURSIVE FUNCTION public int sumOfNodes() { return sumOfNodes(root); } // FUNCTION TO CREATE A TREE WITH SAMPLE NODES void populateNodes() { root = new Node(6); root.left = new Node(3); root.right = new Node(1); root.left.left = new Node(4); root.right.left = new Node(5); root.right.right = new Node(10); root.right.left.right = new Node(3); } } // CLASS WITH main FUNCTION class RTDemo { public static void main(String[] args) { BinaryTree tree = new BinaryTree(); tree.populateNodes(); System.out.println(tree.sumOfNodes()); } }
The function sumOfNodes takes O(n) time.