ভারসাম্য বাইনারি ট্রি লেটকোড সমাধান


কাঠিন্য মাত্রা সহজ
প্রায়শই জিজ্ঞাসা করা হয় মর্দানী স্ত্রীলোক গুগল মাইক্রোসফট
বিন্যাস

A বাইনারি গাছ গাছের প্রতিটি নোডের বাম এবং ডান সাবট্রির উচ্চতার পার্থক্য যদি সর্বোচ্চ হয় তবে এই সমস্যাটিতে আমরা একটি ভারসাম্য বাইনারি গাছের জন্য যাচ্ছি।

ভারসাম্য বাইনারি ট্রি লেটকোড সমাধান

উদাহরণ

             2
        
          / 
    
        1

      /
 
    4
Not balanced
     1

  /     \

2         3
Balanced

অভিগমন

এটি ভাবা স্বজ্ঞাত, এটির জন্য প্রতি বাইনারি গাছের নোড, আমরা বাম এবং ডান সাবট্রিজগুলি প্রয়োজনীয় শর্তটি অনুসরণ করে কিনা তা পরীক্ষা করতে পারি। এটাই “নিষ্ঠুর শক্তি”পদ্ধতি।

তবে, গাছটি ভারসাম্যযুক্ত কিনা তা পরীক্ষা করার জন্য, স্থলভাগে পদ্ধতির উন্নতি করা যেতে পারে সময় ও স্থান জটিলতা

আমরা এমন পদ্ধতির অনুসরণ করি যাতে আমরা সমস্যা সমাধান করি বটম-আপ পদ্ধতি। নোডের সাবট্রিজগুলি নিজেই সুষম বাইনারি কিনা তা পরীক্ষা করে দেখুন গাছ(অথবা না) এবং একই সময়ে বাইনারি গাছের উচ্চতা অর্জন করুন যা পুনরাবৃত্তি ব্যবহার করে সাধারণ করা যায়।

অ্যালগরিদম (ব্রুট ফোর্স)

  1. মূল থেকে শুরু করুন এবং বাইনারি গাছটিকে ট্রাম্প করতে থাকুন যতক্ষণ না শিকড় হয়ে শূন্য
  2. বাম এবং ডান সাবট্রিজ ব্যবহার করে উচ্চতা পুনরুদ্ধার করুন উচ্চতা () ক্রিয়া
    • পার্থক্য বেশি হলে '1':
      • মিথ্যা প্রত্যাবর্তন। গাছ ভারসাম্য শর্ত পূরণ না করে
    • বাম এবং ডান সাবট্রিজগুলির পুনরাবৃত্তভাবে ভারসাম্য শর্তটি পরীক্ষা করুন
  3. ফলাফল মুদ্রণ করুন

অ্যালগরিদম (অনুকূল)

  1. যদি গাছ হয় খালি, আমরা বলতে পারি এটি ভারসাম্যপূর্ণ। যদি তা না হয় তবে আমরা অন্যান্য পদক্ষেপগুলি অনুসরণ করতে পারি:
  2. "ফিরে আসার জন্য একটি সহায়ক ফাংশন তৈরি করুনউচ্চতাপুনরাবৃত্তি ব্যবহার করে একটি বর্তমান সাবট্রির "
  3. উচ্চতা ফাংশন ফিরে আসবে:
    • -1, যখন এটি ভারসাম্যহীন গাছ
    • অন্যথায় উচ্চতা।
  4. যদি কোনও সাবট্রি বাম বা ডান সাবট্রি থাকে ভারসাম্যহীন, বা তাদের উচ্চতা '1' এর চেয়ে আলাদা, রিটার্ন -1।
  5. অন্যথায়, এই সাবট্রির উচ্চতাটি এখানে ফিরিয়ে দিন: 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

ভারসাম্য বাইনারি গাছের লেটকোড সমাধানের জটিলতা বিশ্লেষণ

সময় জটিলতা

ব্রুট ফোর্স পদ্ধতির একটি সময়ের জটিলতা রয়েছে ও (এন * এন), সবচেয়ে খারাপ ক্ষেত্রে (স্কিউড ট্রি)। তবে সর্বোত্তম পদ্ধতির কাজ করে চালু) সময় হিসাবে আমরা কেবল একটি একক পাস।

স্পেস জটিলতা ity

উভয় ক্ষেত্রে ও (এন), হিসাবে পুনরাবৃত্তি সহায়ক স্ট্যাক স্পেস ব্যবহার করে।