Sum of nodes at maximum depth of a Binary Tree
Last Updated :
15 Sep, 2022
Given a root node to a tree, find the sum of all the leaf nodes which are at maximum depth from root node.
Example:
1
/ \
2 3
/ \ / \
4 5 6 7
Input : root(of above tree)
Output : 22
Explanation:
Nodes at maximum depth are: 4, 5, 6, 7.
So, sum of these nodes = 22
While traversing the nodes compare the level of the node with max_level (Maximum level till the current node). If the current level exceeds the maximum level, update the max_level as the current level. If the max level and current level are the same, add the root data to the current sum. if the level is less than max_level, do nothing.
Implementation:
C++
// Code to find the sum of the nodes
// which are present at the maximum depth.
#include <bits/stdc++.h>
using namespace std;
int sum = 0, max_level = INT_MIN;
struct Node
{
int d;
Node *l;
Node *r;
};
// Function to return a new node
Node* createNode(int d)
{
Node *node;
node = new Node;
node->d = d;
node->l = NULL;
node->r = NULL;
return node;
}
// Function to find the sum of the node
// which are present at the maximum depth.
// While traversing the nodes compare the level
// of the node with max_level
// (Maximum level till the current node).
// If the current level exceeds the maximum level,
// update the max_level as current level.
// If the max level and current level are same,
// add the root data to current sum.
void sumOfNodesAtMaxDepth(Node *ro,int level)
{
if(ro == NULL)
return;
if(level > max_level)
{
sum = ro -> d;
max_level = level;
}
else if(level == max_level)
{
sum = sum + ro -> d;
}
sumOfNodesAtMaxDepth(ro -> l, level + 1);
sumOfNodesAtMaxDepth(ro -> r, level + 1);
}
// Driver Code
int main()
{
Node *root;
root = createNode(1);
root->l = createNode(2);
root->r = createNode(3);
root->l->l = createNode(4);
root->l->r = createNode(5);
root->r->l = createNode(6);
root->r->r = createNode(7);
sumOfNodesAtMaxDepth(root, 0);
cout << sum;
return 0;
}
Java
// Java code to find the sum of the nodes
// which are present at the maximum depth.
class GFG
{
static int sum = 0, max_level = Integer.MIN_VALUE;
static class Node
{
int d;
Node l;
Node r;
};
// Function to return a new node
static Node createNode(int d)
{
Node node;
node = new Node();
node.d = d;
node.l = null;
node.r = null;
return node;
}
// Function to find the sum of the node
// which are present at the maximum depth.
// While traversing the nodes compare the level
// of the node with max_level
// (Maximum level till the current node).
// If the current level exceeds the maximum level,
// update the max_level as current level.
// If the max level and current level are same,
// add the root data to current sum.
static void sumOfNodesAtMaxDepth(Node ro,int level)
{
if(ro == null)
return;
if(level > max_level)
{
sum = ro . d;
max_level = level;
}
else if(level == max_level)
{
sum = sum + ro . d;
}
sumOfNodesAtMaxDepth(ro . l, level + 1);
sumOfNodesAtMaxDepth(ro . r, level + 1);
}
// Driver Code
public static void main(String[] args)
{
Node root;
root = createNode(1);
root.l = createNode(2);
root.r = createNode(3);
root.l.l = createNode(4);
root.l.r = createNode(5);
root.r.l = createNode(6);
root.r.r = createNode(7);
sumOfNodesAtMaxDepth(root, 0);
System.out.println(sum);
}
}
/* This code is contributed by PrinciRaj1992 */
Python3
# Python3 code to find the sum of the nodes
# which are present at the maximum depth.
sum = [0]
max_level = [-(2**32)]
# Binary tree node
class createNode:
def __init__(self, data):
self.d = data
self.l = None
self.r = None
# Function to find the sum of the node
# which are present at the maximum depth.
# While traversing the nodes compare the level
# of the node with max_level
# (Maximum level till the current node).
# If the current level exceeds the maximum level,
# update the max_level as current level.
# If the max level and current level are same,
# add the root data to current sum.
def sumOfNodesAtMaxDepth(ro, level):
if(ro == None):
return
if(level > max_level[0]):
sum[0] = ro . d
max_level[0] = level
elif(level == max_level[0]):
sum[0] = sum[0] + ro . d
sumOfNodesAtMaxDepth(ro . l, level + 1)
sumOfNodesAtMaxDepth(ro . r, level + 1)
# Driver Code
root = createNode(1)
root.l = createNode(2)
root.r = createNode(3)
root.l.l = createNode(4)
root.l.r = createNode(5)
root.r.l = createNode(6)
root.r.r = createNode(7)
sumOfNodesAtMaxDepth(root, 0)
print(sum[0])
# This code is contributed by SHUBHAMSINGH10
C#
// C# code to find the sum of the nodes
// which are present at the maximum depth.
using System;
class GFG
{
static int sum = 0, max_level = int.MinValue;
public class Node
{
public int d;
public Node l;
public Node r;
};
// Function to return a new node
static Node createNode(int d)
{
Node node;
node = new Node();
node.d = d;
node.l = null;
node.r = null;
return node;
}
// Function to find the sum of the node
// which are present at the maximum depth.
// While traversing the nodes compare the level
// of the node with max_level
// (Maximum level till the current node).
// If the current level exceeds the maximum level,
// update the max_level as current level.
// If the max level and current level are same,
// add the root data to current sum.
static void sumOfNodesAtMaxDepth(Node ro,int level)
{
if(ro == null)
return;
if(level > max_level)
{
sum = ro . d;
max_level = level;
}
else if(level == max_level)
{
sum = sum + ro . d;
}
sumOfNodesAtMaxDepth(ro . l, level + 1);
sumOfNodesAtMaxDepth(ro . r, level + 1);
}
// Driver Code
public static void Main(String[] args)
{
Node root;
root = createNode(1);
root.l = createNode(2);
root.r = createNode(3);
root.l.l = createNode(4);
root.l.r = createNode(5);
root.r.l = createNode(6);
root.r.r = createNode(7);
sumOfNodesAtMaxDepth(root, 0);
Console.WriteLine(sum);
}
}
// This code is contributed by Princi Singh
JavaScript
<script>
// Javascript code to find the sum of the nodes
// which are present at the maximum depth.
var sum = 0, max_level = -1000000000;
class Node
{
constructor()
{
this.d = 0;
this.l = null;
this.r = null;
}
};
// Function to return a new node
function createNode(d)
{
var node;
node = new Node();
node.d = d;
node.l = null;
node.r = null;
return node;
}
// Function to find the sum of the node
// which are present at the maximum depth.
// While traversing the nodes compare the level
// of the node with max_level
// (Maximum level till the current node).
// If the current level exceeds the maximum level,
// update the max_level as current level.
// If the max level and current level are same,
// add the root data to current sum.
function sumOfNodesAtMaxDepth(ro, level)
{
if (ro == null)
return;
if (level > max_level)
{
sum = ro . d;
max_level = level;
}
else if (level == max_level)
{
sum = sum + ro . d;
}
sumOfNodesAtMaxDepth(ro.l, level + 1);
sumOfNodesAtMaxDepth(ro.r, level + 1);
}
// Driver Code
var root;
root = createNode(1);
root.l = createNode(2);
root.r = createNode(3);
root.l.l = createNode(4);
root.l.r = createNode(5);
root.r.l = createNode(6);
root.r.r = createNode(7);
sumOfNodesAtMaxDepth(root, 0);
document.write(sum);
// This code is contributed by rrrtnx
</script>
Complexity Analysis:
- Time Complexity: O(n), As we are visiting every node just once.
- Auxiliary Space: O(h), Here h is the height of the tree and the extra space is used in the recursion call stack.
Approach: Calculate the max depth of the given tree. Now, start traversing the tree similarly as traversed during maximum depth calculation. But, this time with one more argument (i.e. maxdepth), traverse recursively with decreasing depth by 1 for each left or right call. Wherever max == 1, means the node at max depth is reached. So add its data value to the sum. Finally, return the sum.
Below is the implementation for the above approach:
C++
// C++ code for sum of nodes
// at maximum depth
#include <bits/stdc++.h>
using namespace std;
struct Node
{
int data;
Node* left, *right;
// Constructor
Node(int data)
{
this->data = data;
this->left = NULL;
this->right = NULL;
}
};
// function to find the sum of nodes at
// maximum depth arguments are node and
// max, where max is to match the depth
// of node at every call to node, if
// max will be equal to 1, means
// we are at deepest node.
int sumMaxLevelRec(Node* node, int max)
{
// base case
if (node == NULL)
return 0;
// max == 1 to track the node
// at deepest level
if (max == 1)
return node->data;
// recursive call to left and right nodes
return sumMaxLevelRec(node->left, max - 1) +
sumMaxLevelRec(node->right, max - 1);
}
// maxDepth function to find the
// max depth of the tree
int maxDepth(Node* node)
{
// base case
if (node == NULL)
return 0;
// either leftDepth of rightDepth is
// greater add 1 to include height
// of node at which call is
return 1 + max(maxDepth(node->left),
maxDepth(node->right));
}
int sumMaxLevel(Node* root)
{
// call to function to calculate
// max depth
int MaxDepth = maxDepth(root);
return sumMaxLevelRec(root, MaxDepth);
}
// Driver code
int main()
{
/* 1
/ \
2 3
/ \ / \
4 5 6 7 */
// Constructing tree
Node* root = new Node(1);
root->left = new Node(2);
root->right = new Node(3);
root->left->left = new Node(4);
root->left->right = new Node(5);
root->right->left = new Node(6);
root->right->right = new Node(7);
// call to calculate required sum
cout<<(sumMaxLevel(root))<<endl;
}
// This code is contributed by Arnab Kundu
Java
// Java code for sum of nodes
// at maximum depth
import java.util.*;
class Node {
int data;
Node left, right;
// Constructor
public Node(int data)
{
this.data = data;
this.left = null;
this.right = null;
}
}
class GfG {
// function to find the sum of nodes at
// maximum depth arguments are node and
// max, where max is to match the depth
// of node at every call to node, if
// max will be equal to 1, means
// we are at deepest node.
public static int sumMaxLevelRec(Node node,
int max)
{
// base case
if (node == null)
return 0;
// max == 1 to track the node
// at deepest level
if (max == 1)
return node.data;
// recursive call to left and right nodes
return sumMaxLevelRec(node.left, max - 1) +
sumMaxLevelRec(node.right, max - 1);
}
public static int sumMaxLevel(Node root) {
// call to function to calculate
// max depth
int MaxDepth = maxDepth(root);
return sumMaxLevelRec(root, MaxDepth);
}
// maxDepth function to find the
// max depth of the tree
public static int maxDepth(Node node)
{
// base case
if (node == null)
return 0;
// either leftDepth of rightDepth is
// greater add 1 to include height
// of node at which call is
return 1 + Math.max(maxDepth(node.left),
maxDepth(node.right));
}
// Driver code
public static void main(String[] args)
{
/* 1
/ \
2 3
/ \ / \
4 5 6 7 */
// Constructing tree
Node root = new Node(1);
root.left = new Node(2);
root.right = new Node(3);
root.left.left = new Node(4);
root.left.right = new Node(5);
root.right.left = new Node(6);
root.right.right = new Node(7);
// call to calculate required sum
System.out.println(sumMaxLevel(root));
}
}
Python3
# Python3 code for sum of nodes at maximum depth
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
# Function to find the sum of nodes at maximum depth
# arguments are node and max, where Max is to match
# the depth of node at every call to node, if Max
# will be equal to 1, means we are at deepest node.
def sumMaxLevelRec(node, Max):
# base case
if node == None:
return 0
# Max == 1 to track the node at deepest level
if Max == 1:
return node.data
# recursive call to left and right nodes
return (sumMaxLevelRec(node.left, Max - 1) +
sumMaxLevelRec(node.right, Max - 1))
def sumMaxLevel(root):
# call to function to calculate max depth
MaxDepth = maxDepth(root)
return sumMaxLevelRec(root, MaxDepth)
# maxDepth function to find
# the max depth of the tree
def maxDepth(node):
# base case
if node == None:
return 0
# Either leftDepth of rightDepth is
# greater add 1 to include height
# of node at which call is
return 1 + max(maxDepth(node.left),
maxDepth(node.right))
# Driver code
if __name__ == "__main__":
# Constructing tree
root = Node(1)
root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)
root.left.right = Node(5)
root.right.left = Node(6)
root.right.right = Node(7)
# call to calculate required sum
print(sumMaxLevel(root))
# This code is contributed by Rituraj Jain
C#
using System;
// C# code for sum of nodes
// at maximum depth
public class Node
{
public int data;
public Node left, right;
// Constructor
public Node(int data)
{
this.data = data;
this.left = null;
this.right = null;
}
}
public class GfG
{
// function to find the sum of nodes at
// maximum depth arguments are node and
// max, where max is to match the depth
// of node at every call to node, if
// max will be equal to 1, means
// we are at deepest node.
public static int sumMaxLevelRec(Node node, int max)
{
// base case
if (node == null)
{
return 0;
}
// max == 1 to track the node
// at deepest level
if (max == 1)
{
return node.data;
}
// recursive call to left and right nodes
return sumMaxLevelRec(node.left, max - 1)
+ sumMaxLevelRec(node.right, max - 1);
}
public static int sumMaxLevel(Node root)
{
// call to function to calculate
// max depth
int MaxDepth = maxDepth(root);
return sumMaxLevelRec(root, MaxDepth);
}
// maxDepth function to find the
// max depth of the tree
public static int maxDepth(Node node)
{
// base case
if (node == null)
{
return 0;
}
// either leftDepth of rightDepth is
// greater add 1 to include height
// of node at which call is
return 1 + Math.Max(maxDepth(node.left),
maxDepth(node.right));
}
// Driver code
public static void Main(string[] args)
{
/* 1
/ \
2 3
/ \ / \
4 5 6 7 */
// Constructing tree
Node root = new Node(1);
root.left = new Node(2);
root.right = new Node(3);
root.left.left = new Node(4);
root.left.right = new Node(5);
root.right.left = new Node(6);
root.right.right = new Node(7);
// call to calculate required sum
Console.WriteLine(sumMaxLevel(root));
}
}
// This code is contributed by Shrikant13
JavaScript
<script>
// Javascript code for sum of nodes at maximum depth
// Structure of a tree node.
class Node
{
constructor(data) {
this.left = null;
this.right = null;
this.data = data;
}
}
// function to find the sum of nodes at
// maximum depth arguments are node and
// max, where max is to match the depth
// of node at every call to node, if
// max will be equal to 1, means
// we are at deepest node.
function sumMaxLevelRec(node, max)
{
// base case
if (node == null)
return 0;
// max == 1 to track the node
// at deepest level
if (max == 1)
return node.data;
// recursive call to left and right nodes
return sumMaxLevelRec(node.left, max - 1) +
sumMaxLevelRec(node.right, max - 1);
}
function sumMaxLevel(root) {
// call to function to calculate
// max depth
let MaxDepth = maxDepth(root);
return sumMaxLevelRec(root, MaxDepth);
}
// maxDepth function to find the
// max depth of the tree
function maxDepth(node)
{
// base case
if (node == null)
return 0;
// either leftDepth of rightDepth is
// greater add 1 to include height
// of node at which call is
return 1 + Math.max(maxDepth(node.left),
maxDepth(node.right));
}
/* 1
/ \
2 3
/ \ / \
4 5 6 7 */
// Constructing tree
let root = new Node(1);
root.left = new Node(2);
root.right = new Node(3);
root.left.left = new Node(4);
root.left.right = new Node(5);
root.right.left = new Node(6);
root.right.right = new Node(7);
// call to calculate required sum
document.write(sumMaxLevel(root));
// This code is contributed by divyesh072019.
</script>
Complexity Analysis:
- Time Complexity: O(N), where N is the number of nodes in the tree.
- Auxiliary Space: O(h), Here h is the height of the tree and the extra space is used in the recursion call stack.
Method 3: Using a Queue
Approach: In this approach, the idea is to traverse the tree in level order and for each level calculate the sum of all the nodes in that level. For each level, we push all the nodes of the tree into the queue and calculate the sum of the nodes. So, when we reach the end leaves in the tree, the sum is the total sum of all the leaves in the binary tree.
Below is the implementation of the above approach:
C++
// C++ code for the above approach
#include <bits/stdc++.h>
using namespace std;
struct TreeNode
{
int val;
TreeNode *left;
TreeNode *right;
};
// Function to return a new node
TreeNode *createNode(int d)
{
TreeNode *node;
node = new TreeNode();
node->val = d;
node->left = NULL;
node->right = NULL;
return node;
}
// Iterative function to find the sum of the deepest
// nodes.
int deepestLeavesSum(TreeNode *root)
{
// if the root is NULL then return 0
if (root == NULL)
{
return 0;
}
// Initialize an empty queue.
queue<TreeNode *> qu;
// push the root of the tree into the queue
qu.push(root);
// initialize sum of current level to 0
int sumOfCurrLevel = 0;
// loop until the queue is not empty
while (!qu.empty())
{
int size = qu.size();
sumOfCurrLevel = 0;
while (size-- > 0)
{
TreeNode *head = qu.front();
qu.pop();
sumOfCurrLevel += head->val;
// if the left child of the head is not NULL
if (head->left != NULL)
{
//push the child into the queue
qu.push(head->left);
}
// if the right child is not NULL
if (head->right != NULL)
{
// push the child into the queue
qu.push(head->right);
}
}
}
return sumOfCurrLevel;
}
// Driver code
int main()
{
TreeNode *root;
root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
root->right->left = createNode(6);
root->right->right = createNode(7);
cout << (deepestLeavesSum(root));
return 0;
}
// This code is contributed by Potta Lokesh
Java
// Java code to print the sum of leaves present at maximum
// depth of a binary tree
import java.util.*;
class GFG {
static class TreeNode {
int val;
TreeNode left;
TreeNode right;
};
// Function to return a new node
static TreeNode createNode(int d)
{
TreeNode node;
node = new TreeNode();
node.val = d;
node.left = null;
node.right = null;
return node;
}
// Iterative function to find the sum of the deepest
// nodes.
public static int deepestLeavesSum(TreeNode root)
{
// if the root is null then return 0
if (root== null) {
return 0;
}
// Initialize an empty queue.
Queue<TreeNode> qu= new LinkedList<>();
// push the root of the tree into the queue
qu.offer(root);
// initialize sum of current level to 0
int sumOfCurrLevel= 0;
// loop until the queue is not empty
while (!qu.isEmpty()) {
int size = qu.size();
sumOfCurrLevel = 0;
while (size-- > 0) {
TreeNode head = qu.poll();
sumOfCurrLevel += head.val;
// if the left child of the head is not null
if (head.left!= null) {
//push the child into the queue
qu.offer(head.left);
}
// if the right child is not null
if (head.right!= null) {
// push the child into the queue
qu.offer(head.right);
}
}
}
return sumOfCurrLevel;
}
public static void main(String[] args)
{
TreeNode root;
root = createNode(1);
root.left = createNode(2);
root.right = createNode(3);
root.left.left = createNode(4);
root.left.right = createNode(5);
root.right.left = createNode(6);
root.right.right = createNode(7);
System.out.println(deepestLeavesSum(root));
}
}
// this code is contributed by Rohan Raj
Python3
# Python code to print the sum
# of leaves present at maximum
# depth of a binary tree
class TreeNode:
def __init__(self):
self.val = 0
self.left = None
self.right = None
def createNode(d):
node = TreeNode()
node.val = d
node.left = None
node.right = None
return node
# Iterative function to find the sum of the deepest
# nodes.
def deepestLeavesSum(root):
# if the root is None then return 0
if (root== None):
return 0
# Initialize an empty queue.
qu= []
# append the root of the tree into the queue
qu.append(root)
# initialize sum of current level to 0
sumOfCurrLevel= 0
# loop until the queue is not empty
while (len(qu) != 0):
size = len(qu)
sumOfCurrLevel = 0
while (size):
head = qu[0]
qu = qu[1:]
sumOfCurrLevel += head.val
# if the left child of the head is not None
if (head.left!= None):
# append the child into the queue
qu.append(head.left)
# if the right child is not None
if (head.right!= None):
# append the child into the queue
qu.append(head.right)
size -= 1
return sumOfCurrLevel
root = createNode(1)
root.left = createNode(2)
root.right = createNode(3)
root.left.left = createNode(4)
root.left.right = createNode(5)
root.right.left = createNode(6)
root.right.right = createNode(7)
print(deepestLeavesSum(root))
# This code is contributed by shinjanpatra
C#
// C# code to print the sum of leaves present at maximum
// depth of a binary tree
using System;
using System.Collections.Generic;
public class GFG {
public class TreeNode {
public int val;
public TreeNode left;
public TreeNode right;
};
// Function to return a new node
static TreeNode createNode(int d)
{
TreeNode node;
node = new TreeNode();
node.val = d;
node.left = null;
node.right = null;
return node;
}
// Iterative function to find the sum of the deepest
// nodes.
public static int deepestLeavesSum(TreeNode root)
{
// if the root is null then return 0
if (root == null)
{
return 0;
}
// Initialize an empty queue.
Queue<TreeNode> qu= new Queue<TreeNode>();
// push the root of the tree into the queue
qu.Enqueue(root);
// initialize sum of current level to 0
int sumOfCurrLevel= 0;
// loop until the queue is not empty
while (qu.Count != 0)
{
int size = qu.Count;
sumOfCurrLevel = 0;
while (size-- > 0)
{
TreeNode head = qu.Dequeue();
sumOfCurrLevel += head.val;
// if the left child of the head is not null
if (head.left!= null)
{
//push the child into the queue
qu.Enqueue(head.left);
}
// if the right child is not null
if (head.right!= null)
{
// push the child into the queue
qu.Enqueue(head.right);
}
}
}
return sumOfCurrLevel;
}
public static void Main(String[] args)
{
TreeNode root;
root = createNode(1);
root.left = createNode(2);
root.right = createNode(3);
root.left.left = createNode(4);
root.left.right = createNode(5);
root.right.left = createNode(6);
root.right.right = createNode(7);
Console.WriteLine(deepestLeavesSum(root));
}
}
// This code is contributed by umadevi9616
JavaScript
<script>
// JavaScript code to print the sum
// of leaves present at maximum
// depth of a binary tree
class TreeNode
{
constructor()
{
this.val=0;
this.left=this.right=null;
}
}
function createNode(d)
{
let node;
node = new TreeNode();
node.val = d;
node.left = null;
node.right = null;
return node;
}
// Iterative function to find the sum of the deepest
// nodes.
function deepestLeavesSum(root)
{
// if the root is null then return 0
if (root== null) {
return 0;
}
// Initialize an empty queue.
let qu= [];
// push the root of the tree into the queue
qu.push(root);
// initialize sum of current level to 0
let sumOfCurrLevel= 0;
// loop until the queue is not empty
while (qu.length!=0) {
let size = qu.length;
sumOfCurrLevel = 0;
while (size-- > 0) {
let head = qu.shift();
sumOfCurrLevel += head.val;
// if the left child of the head is not null
if (head.left!= null) {
//push the child into the queue
qu.push(head.left);
}
// if the right child is not null
if (head.right!= null) {
// push the child into the queue
qu.push(head.right);
}
}
}
return sumOfCurrLevel;
}
let root = createNode(1);
root.left = createNode(2);
root.right = createNode(3);
root.left.left = createNode(4);
root.left.right = createNode(5);
root.right.left = createNode(6);
root.right.right = createNode(7);
document.write(deepestLeavesSum(root));
// This code is contributed by avanitrachhadiya2155
</script>
Complexity Analysis:
- Time Complexity: O(N) where N is the number of nodes in the tree.
- Auxiliary Space: O(b), Here b is the width of the tree and the extra space is used to store the elements of the current level in the queue.
Similar Reads
Sum of nodes at maximum depth of a Binary Tree | Iterative Approach
Given a root node to a tree, find the sum of all the leaf nodes which are at maximum depth from the root node.Example: 1 / \ 2 3 / \ / \ 4 5 6 7Input : root(of above tree)Output : 22Explanation:Nodes at maximum depth are 4, 5, 6, 7. So, the sum of these nodes = 22Approach: There exists a recursive a
7 min read
Sum of all leaf nodes of binary tree
Given a binary tree, find the sum of all the leaf nodes.Examples: Input : 1 / \ 2 3 / \ / \ 4 5 6 7 \ 8 Output : Sum = 4 + 5 + 8 + 7 = 24 Recommended PracticeSum of Leaf NodesTry It! The idea is to traverse the tree in any fashion and check if the node is the leaf node or not. If the node is the lea
5 min read
Sum of all nodes in a binary tree
Give an algorithm for finding the sum of all elements in a binary tree. In the above binary tree sum = 106. Recommended PracticeSum of Binary TreeTry It!The idea is to recursively, call left subtree sum, right subtree sum and add their values to current node's data. Implementation: C++ /* Program to
15+ min read
Maximum Depth of Binary Tree
Given a binary tree, the task is to find the maximum depth of the tree. The maximum depth or height of the tree is the number of edges in the tree from the root to the deepest node.Examples:Input: Output: 2Explanation: The longest path from the root (node 12) goes through node 8 to node 5, which has
11 min read
Sum of all the Boundary Nodes of a Binary Tree
Given a binary tree, the task is to print the sum of all the boundary nodes of the tree. Examples: Input: 1 / \ 2 3 / \ / \ 4 5 6 7 Output: 28 Input: 1 / \ 2 3 \ / 4 5 \ 6 / \ 7 8 Output: 36 Approach: We have already discussed the Boundary Traversal of a Binary tree. Here we will find the sum of the
10 min read
Sum of heights of all individual nodes in a binary tree
Given a binary tree, find the sum of heights of all individual nodes in the tree. Example: For this tree: 1). Height of Node 1 - 3 2). Height of Node 2 - 2 3). Height of Node 3 - 1 4). Height of Node 4 - 1 5). Height of Node 5 - 1 Adding all of them = 8 Prerequisites:- Height of binary tree Simple S
11 min read
Maximum sum of leaf nodes among all levels of the given binary tree
Given a Binary Tree having positive and negative nodes, the task is to find the maximum sum of leaf nodes among all level of the given binary tree.Examples: Input: 4 / \ 2 -5 / \ -1 3 Output: 2 Sum of all leaves at 0th level is 0. Sum of all leaves at 1st level is -5. Sum of all leaves at 2nd level
9 min read
Sum of cousins of a given node in a Binary Tree
Given a binary tree and data value of a node. The task is to find the sum of cousin nodes of given node. If given node has no cousins then return -1. Note: It is given that all nodes have distinct values and the given node exists in the tree. Examples: Input: 1 / \ 3 7 / \ / \ 6 5 4 13 / / \ 10 17 1
11 min read
Sum of nodes in bottom view of Binary Tree
Given a binary tree, the task is to return the sum of nodes in the bottom view of the given Binary Tree. The bottom view of a binary tree is the set of nodes visible when the tree is viewed from the bottom. Note: If there are multiple bottom-most nodes for a horizontal distance from the root, then t
15+ min read
Height and Depth of a node in a Binary Tree
Given a Binary Tree consisting of n nodes and a integer k, the task is to find the depth and height of the node with value k in the Binary Tree.Note:The depth of a node is the number of edges present in path from the root node of a tree to that node. The height of a node is the maximum number of edg
15 min read