સંતુલિત દ્વિસંગી વૃક્ષ લીટકોડ સોલ્યુશન


મુશ્કેલી સ્તર સરળ
વારંવાર પૂછવામાં આવે છે એમેઝોન Google માઈક્રોસોફ્ટ
અરે

A દ્વિસંગી વૃક્ષ જો inંચાઈ સંતુલિત હોય તો જો ઝાડના દરેક નોડની ડાબી અને જમણી સબટ્રીની heંચાઈનો તફાવત સૌથી વધુ 1 હોય છે. આ સમસ્યામાં, આપણે સંતુલિત દ્વિસંગી ઝાડની તપાસ કરીશું.

સંતુલિત દ્વિસંગી વૃક્ષ લીટકોડ સોલ્યુશન

ઉદાહરણ

             2
        
          / 
    
        1

      /
 
    4
Not balanced
     1

  /     \

2         3
Balanced

અભિગમ

તે વિચારવું સાહજિક છે, માટે દરેક બાઈનરી ટ્રીમાં નોડ, અમે ચકાસી શકીએ છીએ કે ડાબી અને જમણી પેટા-ઉપરીઓ જરૂરી શરતનું પાલન કરે છે કે નહીં. તે છે “બ્રુટ ફોર્સ”પદ્ધતિ.

પરંતુ, ઝાડ સંતુલિત છે કે નહીં તે ચકાસવા માટે, આધારો પર અભિગમ સુધારી શકાય છે સમય અને અવકાશ જટિલતાઓને.

અમે એક અભિગમનું પાલન કરીએ છીએ કે આપણે સમસ્યાને હલ કરીયે બોટમ અપ રીત. નોડની સબટ્રીઝ પોતે, સંતુલિત દ્વિસંગી છે કે કેમ તે તપાસો વૃક્ષો(અથવા નહીં) અને તે જ સમયે દ્વિસંગી ઝાડની .ંચાઈ મેળવો, જેને પુનરાવર્તનનો ઉપયોગ કરીને સામાન્ય કરી શકાય છે.

એલ્ગોરિધમ (બ્રુટ ફોર્સ)

  1. મૂળથી પ્રારંભ કરો અને ત્યાં સુધી દ્વિસંગી ઝાડને ટ્રversસ કરવાનું ચાલુ રાખો રુટ બને NULL
  2. નો ઉપયોગ કરીને ડાબી અને જમણી સબટ્રીઝની heightંચાઇ પ્રાપ્ત કરો heightંચાઈ () કાર્ય
    • જો તફાવત કરતાં વધુ છે '1':
      • ખોટા પાછા. જેમ કે ઝાડ સંતુલનની સ્થિતિને સંતોષતું નથી
    • ડાબી અને જમણી સબટ્રીઝ માટે વારંવારની સંતુલનની સ્થિતિ તપાસો
  3. પરિણામ છાપો

અલ્ગોરિધમનો (શ્રેષ્ઠ)

  1. જો વૃક્ષ છે ખાલી, અમે કહી શકીએ કે તે સંતુલિત છે. જો નહીં, તો અમે અન્ય પગલાંને અનુસરી શકીએ:
  2. "પાછા ફરવા માટે સહાયક કાર્ય બનાવો"ઊંચાઈપુનરાવર્તનનો ઉપયોગ કરીને વર્તમાન સબટ્રીનું.
  3. Heંચાઈ કાર્ય પાછા આવશે:
    • -1, જ્યારે તે અસંતુલિત વૃક્ષ છે
    • heightંચાઇ અન્યથા.
  4. જો કોઈ સબટ્રી ડાબી અથવા જમણી સબટ્રી છે અસંતુલિત, અથવા તેમની ightsંચાઈ '1' કરતા વધારે, વળતર -1.
  5. નહિંતર, આ સબટ્રીની heightંચાઈને આ પ્રમાણે પરત કરો: 1 + મેક્સમ (ડાબી_આઈટ, જમણી_અહાઈ)

અમલીકરણ

સંતુલિત બાઈનરી ટ્રી લીટકોડ સોલ્યુશનનો સી ++ પ્રોગ્રામ

જડ બળ પદ્ધતિ

#include <bits/stdc++.h>
using namespace std;
struct treeNode
{
    int value;
    treeNode *left , *right;
    treeNode(int x)
    {
        value = x;
        left = NULL;
        right = NULL;
    }
};


int height(treeNode* root)
{
    if(root == NULL)
        return 0;
    return max(height(root->left) , height(root->right)) + 1;
}


bool balanced(treeNode* root)
{
    if(root == NULL)
    return true;

    int l = height(root->left) , r = height(root->right);
    //calling height function at every node
    if(abs(l - r) > 1)
        return false;

    return balanced(root->left) && balanced(root->right);
}


int main()
{
    treeNode* root = new treeNode(2);
    root->left = new treeNode(2);
    root->left->left = new treeNode(4);
    
    if(balanced(root))
        cout << "Balanced" << '\n';
    else
        cout << "Not Balanced" << '\n';
    return 0;
}

શ્રેષ્ઠ પદ્ધતિ

#include <bits/stdc++.h>
using namespace std;
struct treeNode
{
    int value;
    treeNode *left , *right;
    treeNode(int x)
    {
        value = x;
        left = NULL;
        right = NULL;
    }
};


int height(treeNode* root)
{
    if(root == NULL)
        return 0;
    int l = height(root->left);
    int r = height(root->right);
    if(l == -1 || r == -1 || abs(l - r) > 1)
        return -1;
    return max(l , r) + 1;
}


bool balanced(treeNode* root)
{
    if(root == NULL)
        return true;

    return (height(root) != -1);
}


int main()
{
    treeNode* root = new treeNode(2);
    root->left = new treeNode(2);
    root->left->left = new treeNode(4);

    if(balanced(root))
        cout << "Balanced" << '\n';
    else
        cout << "Not Balanced" << '\n';
    return 0;
}
Not Balanced

સંતુલિત દ્વિસંગી વૃક્ષ લીટકોડ સોલ્યુશનનો જાવા પ્રોગ્રામ

બ્રુટ ફોર્સ

import java.lang.Math;

class treeNode
{
    int value;
    treeNode left, right;

    public treeNode(int x)
    {
        value= x;
        left = right = null;
    }
}

class balanced_binary_tree
{
    public static int height(treeNode root)
    {
        if(root == null)
            return 0;
        return Math.max(height(root.left) , height(root.right)) + 1;
    }


    public static boolean balanced(treeNode root)
    {
        if(root == null)
            return true;

        int l = height(root.left) , r = height(root.right);
        if(Math.abs(r - l) > 1)
            return false;
        return balanced(root.left) && balanced(root.right);
    }


    public static void main(String args[])
    {
        treeNode root = new treeNode(2);
        root.left = new treeNode(1);
        root.right = new treeNode(3);

        if(balanced(root))
            System.out.println("Balanced");
        else
            System.out.println("Not Balanced");
    }
}

શ્રેષ્ઠ પદ્ધતિ

import java.lang.Math;

class treeNode
{
    int value;
    treeNode left, right;

    public treeNode(int x)
    {
        value= x;
        left = right = null;
    }
}

class balanced_binary_tree
{
    public static int height(treeNode root)
    {
        if(root == null)
            return 0;

        int l = height(root.left);
        int r = height(root.right);

        if(l == -1 || r == -1 || Math.abs(l - r) > 1)
            return -1;

        return Math.max(l , r) + 1;
    }


    public static boolean balanced(treeNode root)
    {
        if(root == null)
            return true;

        return (height(root) != -1);
    }


    public static void main(String args[])
    {
        treeNode root = new treeNode(2);
        root.left = new treeNode(1);
        root.left.left = new treeNode(4);

        if(balanced(root))
            System.out.println("Balanced");
        else
            System.out.println("Not Balanced");
    }
}
Not Balanced

સંતુલિત બાઈનરી ટ્રી લીટકોડ સોલ્યુશનનું જટિલતા વિશ્લેષણ

સમય જટિલતા

બ્રુટ ફોર્સ પદ્ધતિની સમય જટિલતા હોય છે ઓ (એન * એન), સૌથી ખરાબ કિસ્સામાં (સ્ક્યૂડ ટ્રી). જો કે, શ્રેષ્ઠ અભિગમમાં કાર્ય કરે છે ઓ (એન) સમય આપણે ફક્ત એક જ પાસ કરીએ છીએ.

અવકાશ જટિલતા

ઓ (એન) બંને કિસ્સાઓમાં, કારણ કે પુનરાવૃત્તિ સહાયક સ્ટેક જગ્યાનો ઉપયોગ કરે છે.