Horje
Check if Binary Heap is completely filled

Given an integer N which denotes the number of elements in a binary heap. Check if the binary Heap is completely filled or not.

Examples:

Input: 7
Output: YES
Explanation: At height = 0, no. of elements = 1
At height = 1, no. of elements = 2
At height = 2, no. of elements = 4 
Last level is completely filled because at level 2 we need 22 = 4 
elements to fill completely and 4 elements are here.

Input: 16
Output: NO
Explanation: At height=0, no. of elements=1
At height = 1, no. of elements = 2
At height = 2, no. of elements = 4
At height = 3, no. of elements = 8
At height = 4, no. of elements = 1 
Last level is not completely filled because at level 4 
we need 24 = 16 elements to fill completely but here is only 1 element

Input: 31
Output: YES

Approach: The idea here is 

In a binary heap, a parent has 2 children. For each level h, number of elements are 2h

Follow the steps below to solve the given problem:

  • First find the number of nodes till height h = 20 + 21 + 22 + . . . + 2h.
  • Above written series is a geometric progression, so using sum of GP = ( a( rk-1 )/(r-1) ), here a = 20 = 1, r = 2, k = h.
  • Therefore sum = 1 * (2h – 1) / (2 – 1) = 2h – 1.
  • Height of a binary tree = log2N+ 1.
  • Now check if the sum is equal to N or not.

Below is the implementation of the above approach: 

C++

// C++ code to implement the approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to check whether
// it is completely filled or not
string isCompletelyFilled(int n)
{
    // Height of the heap
    int height = log2(n) + 1;
 
    // Sum of number of elements
    int sum = pow(2, height) - 1;
 
    // If sum equals to n print yes
    if (sum == n)
        return "Yes";
    return "No";
}
 
// Driver code
int main()
{
    int N = 7;
 
    // Function call
    cout << isCompletelyFilled(N);
    return 0;
}

Java

// JAVA program of above approach.
import java.util.*;
class GFG
{
 
// Function to check whether
// it is completely filled or not
static String isCompletelyFilled(int n)
{
    // Height of the heap
    int height =(int)(Math.log(n) / Math.log(2)) + 1;
 
    // Sum of number of elements
    int sum = (int)Math.pow(2, height) - 1;
 
    // If sum equals to n print yes
    if (sum == n)
        return "Yes";
    return "No";
}
 
// Driver code
public static void main(String[] args)
{
    int N = 7;
 
    // Function call
    System.out.print(isCompletelyFilled(N));
}
}
 
// This code is contributed by sanjoy_62.

Python3

# Python code to implement the approach
import math
 
# Function to check whether
# it is completely filled or not
def isCompletelyFilled(n) :
     
    # Height of the heap
    height = int(math.log2(n)) + 1
 
    # Sum of number of elements
    sum = pow(2, height) - 1
 
    # If sum equals to n print yes
    if (sum == n) :
        return "Yes"
    return "No"
 
 
# Driver code
 
N = 7
 
# Function call
print(isCompletelyFilled(N))
 
# This code is contributed by splevel62.

C#

// C# program of above approach.
 
using System;
 
public class GFG {
 
    // Function to check whether
    // it is completely filled or not
    static String isCompletelyFilled(int n)
    {
        // Height of the heap
        int height = (int)(Math.Log(n) / Math.Log(2)) + 1;
 
        // Sum of number of elements
        int sum = (int)Math.Pow(2, height) - 1;
 
        // If sum equals to n print yes
        if (sum == n)
            return "Yes";
        return "No";
    }
 
    static public void Main()
    {
 
        // Code
        int N = 7;
 
        // Function call
        Console.Write(isCompletelyFilled(N));
    }
}
 
// This code is contributed by lokeshmvs21.

Javascript

<script>
    // JavaScript code for the above approach
 
// Function to check whether
// it is completely filled or not
function isCompletelyFilled(n)
{
    // Height of the heap
    let height = Math.floor(Math.log(n) / Math.log(2)) + 1;
  
    // Sum of number of elements
    let sum = Math.pow(2, height) - 1;
  
    // If sum equals to n print yes
    if (sum == n)
        return "Yes";
    return "No";
}
 
    // Driver code
    let N = 7;
  
    // Function call
    document.write(isCompletelyFilled(N));
     
    // This code is contributed by code_hunt.
</script>

Output

Yes

Time Complexity: O(logN), time taken by pow is logN
Auxiliary Space: O(1)




Reffered: https://www.geeksforgeeks.org


Heap

Related
Benefits of Heap over Sorted Arrays Benefits of Heap over Sorted Arrays
Find min and max values among all maximum leaf nodes from all possible Binary Max Heap Find min and max values among all maximum leaf nodes from all possible Binary Max Heap
Maximum number of diamonds that can be gained in K minutes Maximum number of diamonds that can be gained in K minutes
Maximum number of apples that can be eaten by a person Maximum number of apples that can be eaten by a person
Difference between Binary Heap, Binomial Heap and Fibonacci Heap Difference between Binary Heap, Binomial Heap and Fibonacci Heap

Type:
Geek
Category:
Coding
Sub Category:
Tutorial
Uploaded by:
Admin
Views:
11