Print all K-sum levels in a Binary Tree
Last Updated :
31 Jan, 2023
Given a Binary Tree and an integer K where the tree has positive and negative nodes, the task is to print the elements of the level whose sum equals K. If no such result exists, then print "Not Possible".
Examples:
Input:
-10
/ \
2 -3
/ \ \
4 15 -6
/ \ /
7 -8 9
K = 13
Output: 4 15 -6
Explanation:
Level 1 (-10): Sum = -10
Level 2 (2, 3): Sum = 5
Level 3 (4, 15, -6): Sum = 13
Level 4 (7, -8, 9): Sum = 8
Only level 3 (4, 15, -6) has sum = K
Input:
1
/ \
12 13
/ / \
11 6 -11
\ /
2 2
K = 30
Output: Not Possible
Explanation:
There is no such level whose sum = K
Approach:
- Perform level order traversal of the Binary tree and store find the sum of each level.
- If the sum is equal to K, print the level. Else move to the next level.
- The process is repeated till all the levels has been traversed and checked.
- If there is no such level with sum K, print "Not Possible".
Below is the implementation of the above approach:
C++
// C++ program to print all
// K-sum levels in a Binary Tree
#include <bits/stdc++.h>
using namespace std;
// Vector to store the
// elements of a level
vector<int> level;
// Binary Tree Node
struct node {
struct node* left;
int data;
struct node* right;
};
// Function to display elements
void display(bool flag)
{
// Check if boolean variable is true
// then print the level
if (flag) {
for (auto x : level)
cout << x << " ";
}
else
cout << "Not Possible\n";
}
// Function to find sum of
// elements by level order traversal
void SumlevelOrder(node* root, int k)
{
if (root == NULL)
return;
// Queue data structure for
// level order traversal
queue<node*> q;
// Enqueue Root in Queue
q.push(root);
bool flag = false;
while (q.empty() == false) {
// number of nodes at current level
int nodeCount = q.size();
int Present_level_sum = 0;
// Dequeue all nodes of current level and
// Enqueue all nodes of next level
while (nodeCount > 0) {
node* node = q.front();
// To add node data
Present_level_sum += node->data;
level.push_back(node->data);
q.pop();
if (node->left != NULL)
q.push(node->left);
if (node->right != NULL)
q.push(node->right);
nodeCount--;
}
if (Present_level_sum == k) {
flag = true;
break;
}
level.clear();
}
display(flag);
}
// Function to create a new tree node
node* newNode(int data)
{
node* temp = new node;
temp->data = data;
temp->left = NULL;
temp->right = NULL;
return temp;
}
// Driver code
int main()
{
// Create binary tree
node* root = newNode(1);
root->left = newNode(2);
root->right = newNode(3);
root->left->left = newNode(4);
root->left->right = newNode(5);
root->right->right = newNode(6);
int K = 15;
SumlevelOrder(root, K);
return 0;
}
Java
// Java program to print all
// K-sum levels in a Binary Tree
import java.util.*;
class GFG{
// Vector to store the
// elements of a level
static Vector<Integer> level = new Vector<Integer>();
// Binary Tree Node
static class node {
node left;
int data;
node right;
};
// Function to display elements
static void display(boolean flag)
{
// Check if boolean variable is true
// then print the level
if (flag) {
for (Integer x : level)
System.out.print(x+ " ");
}
else
System.out.print("Not Possible\n");
}
// Function to find sum of
// elements by level order traversal
static void SumlevelOrder(node root, int k)
{
if (root == null)
return;
// Queue data structure for
// level order traversal
Queue<node> q = new LinkedList<>();
// Enqueue Root in Queue
q.add(root);
boolean flag = false;
while (q.isEmpty() == false) {
// number of nodes at current level
int nodeCount = q.size();
int Present_level_sum = 0;
// Dequeue all nodes of current level and
// Enqueue all nodes of next level
while (nodeCount > 0) {
node node = q.peek();
// To add node data
Present_level_sum += node.data;
level.add(node.data);
q.remove();
if (node.left != null)
q.add(node.left);
if (node.right != null)
q.add(node.right);
nodeCount--;
}
if (Present_level_sum == k) {
flag = true;
break;
}
level.clear();
}
display(flag);
}
// Function to create a new tree node
static node newNode(int data)
{
node temp = new node();
temp.data = data;
temp.left = null;
temp.right = null;
return temp;
}
// Driver code
public static void main(String[] args)
{
// Create binary tree
node root = newNode(1);
root.left = newNode(2);
root.right = newNode(3);
root.left.left = newNode(4);
root.left.right = newNode(5);
root.right.right = newNode(6);
int K = 15;
SumlevelOrder(root, K);
}
}
// This code is contributed by 29AjayKumar
Python3
# Python3 program to print all
# K-sum levels in a Binary Tree
from collections import deque as queue
# A BST node
class Node:
def __init__(self, x):
self.data = x
self.left = None
self.right = None
# Vector to store the
# elements of a level
level = []
# Function to display elements
def display(flag):
# Check if boolean variable is
# true then print level
if (flag):
for x in level:
print(x, end = " ")
else:
print("Not Possible\n")
# Function to find sum of elements
# by level order traversal
def SumlevelOrder(root, k):
if (root == None):
return
# Queue data structure for
# level order traversal
q = queue()
# Enqueue Root in Queue
q.append(root)
flag = False
while (len(q) > 0):
# Number of nodes at current level
nodeCount = len(q)
Present_level_sum = 0
# Dequeue all nodes of current level
# and Enqueue all nodes of next level
while (nodeCount > 0):
node = q.popleft()
# To add node data
Present_level_sum += node.data
level.append(node.data)
# q.pop()
if (node.left != None):
q.append(node.left)
if (node.right != None):
q.append(node.right)
nodeCount -= 1
if (Present_level_sum == k):
flag = True
break
level.clear()
display(flag)
# Driver code
if __name__ == '__main__':
# Create binary tree
root = Node(1)
root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)
root.left.right = Node(5)
root.right.right = Node(6)
K = 15
SumlevelOrder(root, K)
# This code is contributed by mohit kumar 29
C#
// C# program to print all
// K-sum levels in a Binary Tree
using System;
using System.Collections.Generic;
class GFG{
// List to store the
// elements of a level
static List<int> level = new List<int>();
// Binary Tree Node
class node {
public node left;
public int data;
public node right;
};
// Function to display elements
static void display(bool flag)
{
// Check if bool variable is true
// then print the level
if (flag) {
foreach (int x in level)
Console.Write(x+ " ");
}
else
Console.Write("Not Possible\n");
}
// Function to find sum of
// elements by level order traversal
static void SumlevelOrder(node root, int k)
{
if (root == null)
return;
// Queue data structure for
// level order traversal
Queue<node> q = new Queue<node>();
// Enqueue Root in Queue
q.Enqueue(root);
bool flag = false;
while (q.Count!=0) {
// number of nodes at current level
int nodeCount = q.Count;
int Present_level_sum = 0;
// Dequeue all nodes of current level and
// Enqueue all nodes of next level
while (nodeCount > 0) {
node node = q.Peek();
// To add node data
Present_level_sum += node.data;
level.Add(node.data);
q.Dequeue();
if (node.left != null)
q.Enqueue(node.left);
if (node.right != null)
q.Enqueue(node.right);
nodeCount--;
}
if (Present_level_sum == k) {
flag = true;
break;
}
level.Clear();
}
display(flag);
}
// Function to create a new tree node
static node newNode(int data)
{
node temp = new node();
temp.data = data;
temp.left = null;
temp.right = null;
return temp;
}
// Driver code
public static void Main(String[] args)
{
// Create binary tree
node root = newNode(1);
root.left = newNode(2);
root.right = newNode(3);
root.left.left = newNode(4);
root.left.right = newNode(5);
root.right.right = newNode(6);
int K = 15;
SumlevelOrder(root, K);
}
}
// This code is contributed by sapnasingh4991
JavaScript
<script>
// Javascript program to print all
// K-sum levels in a Binary Tree
// Vector to store the
// elements of a level
let level = [];
// Binary Tree Node
class Node
{
// Utility function to create a new node
constructor(key)
{
this.data = key;
this.left = this.right = null;
}
}
// Function to display elements
function display(flag)
{
// Check if boolean variable is true
// then print the level
if (flag)
{
for(let x = 0; x < level.length; x++)
document.write(level[x] + " ");
}
else
document.write("Not Possible<br>");
}
// Function to find sum of
// elements by level order traversal
function SumlevelOrder(root, k)
{
if (root == null)
return;
// Queue data structure for
// level order traversal
let q = [];
// Enqueue Root in Queue
q.push(root);
let flag = false;
while (q.length != 0)
{
// Number of nodes at current level
let nodeCount = q.length;
let Present_level_sum = 0;
// Dequeue all nodes of current level and
// Enqueue all nodes of next level
while (nodeCount > 0)
{
let node = q[0];
// To add node data
Present_level_sum += node.data;
level.push(node.data);
q.shift();
if (node.left != null)
q.push(node.left);
if (node.right != null)
q.push(node.right);
nodeCount--;
}
if (Present_level_sum == k)
{
flag = true;
break;
}
level = [];
}
display(flag);
}
// Driver code
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.right = new Node(6);
let K = 15;
SumlevelOrder(root, K);
// This code is contributed by unknown2108
</script>
Time Complexity: O(N) where N is the number of nodes in given binary tree.
Auxiliary Space: O(N) due to queue data structure.
Similar Reads
Print all k-sum paths in a binary tree A binary tree and a number k are given. Print every path in the tree with sum of the nodes in the path as k. A path can start from any node and end at any node and must be downward only, i.e. they need not be root node and leaf node; and negative numbers can also be there in the tree. Examples: Inpu
9 min read
Print Levels of all nodes in a Binary Tree Given a Binary Tree and a key, write a function that prints levels of all keys in given binary tree. For example, consider the following tree. If the input key is 3, then your function should return 1. If the input key is 4, then your function should return 3. And for key which is not present in key
7 min read
Print all nodes in a binary tree having K leaves Given a binary tree and a integer value K, the task is to find all nodes in given binary tree having K leaves in subtree rooted with them. Examples : // For above binary tree Input : k = 2 Output: {3} // here node 3 have k = 2 leaves Input : k = 1 Output: {6} // here node 6 have k = 1 leaveRecommend
7 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
Print all Nodes of given Binary Tree at the Kth Level Given a binary tree and an integer K, the task is to print all the integers at the Kth level in the tree from left to right. Examples: Input: Tree in the image below, K = 3 Output: 4 5 6Explanation: All the nodes present in level 3 of above binary tree from left to right are 4, 5, and 6. Input: Tree
5 min read