কম্পিউটার

C++ এ বাইনারি ট্রি নোড যাচাই করুন


ধরুন আমাদের 0 থেকে n - 1 পর্যন্ত সংখ্যাযুক্ত n বাইনারি ট্রি নোড রয়েছে যেখানে নোড I-এর দুটি সন্তান leftChild[i] এবং rightChild[i] আছে, আমাদের সত্য বলতে হবে যদি এবং শুধুমাত্র যদি সমস্ত প্রদত্ত নোড ঠিক একটি বৈধ বাইনারি গাছ গঠন করে। যখন নোড i কোন বাম সন্তান নেই তখন leftChild[i] সমান হবে -1, একইভাবে ডান সন্তানের জন্য। আমাদের মনে রাখতে হবে যে নোডের কোনো মান নেই এবং আমরা এই সমস্যায় শুধুমাত্র নোড নম্বর ব্যবহার করি। তাই যদি ইনপুট −

এর মত হয়

C++ এ বাইনারি ট্রি নোড যাচাই করুন

তারপর আউটপুট সত্য হবে।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • dfs নামক একটি পদ্ধতি সংজ্ঞায়িত করুন, এটি লেফটচাইল্ড, রাইটচাইল্ড এবং ভিজিট করা হবে

  • যদি নোড n পরিদর্শন করা হয়, তাহলে মিথ্যা ফেরত দিন

  • পরিদর্শন করা সেটে নোড এন প্রবেশ করান

  • সেট ret :=সত্য

  • যদি n-এর leftChild -1 না হয়, তাহলে ret :=ret AND dfs(leftChild[node], leftChild, rightChild, visited)

  • যদি n-এর rightChild -1 না হয়, তাহলে ret :=ret AND dfs(rightChild[node], leftChild, rightChild, visited)

  • রিটার্ন রিটার্ন

  • মূল পদ্ধতিটি হবে −

    এর মত
  • ret :=dfs(0, leftChild, rightChild, পরিদর্শন করা হয়েছে)

  • সেট allVisited :=মিথ্যা

  • আমি 0 থেকে n – 1

    পরিসরে
    • যদি আমাকে পরিদর্শন না করা হয়, তাহলে মিথ্যা ফেরত দিন

  • রিটার্ন রিটার্ন

উদাহরণ (C++)

আরো ভালোভাবে বোঝার জন্য নিচের বাস্তবায়নটি দেখি -

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   bool dfs(int node, vector <int>& leftChild, vector <int>& rightChild, set <int>& visited){
      if(visited.count(node)) return false;
      visited.insert(node);
      bool ret = true;
      if(leftChild[node] != -1){
         ret &= dfs(leftChild[node], leftChild, rightChild, visited);
      }
      if(rightChild[node] != -1){
         ret &= dfs(rightChild[node], leftChild, rightChild, visited);
      }
      return ret;
   }
   bool validateBinaryTreeNodes(int n, vector<int>& leftChild, vector<int>& rightChild) {
      set <int> visited;
      bool ret = dfs(0, leftChild, rightChild, visited);
      bool allVisited = true;
      for(int i = 0; i < n; i++){
         if(!visited.count(i))return false;
      }
      return ret;
   }
};
main(){
   vector<int> v1 = {1,-1,3,-1}, v2 = {2,-1,-1,-1};
   Solution ob;
   cout << (ob.validateBinaryTreeNodes(4, v1, v2));
}

ইনপুট

4
[1,-1,3,-1]
[2,-1,-1,-1]

আউটপুট

1

  1. C++ এ বাইনারি ট্রি প্রুনিং

  2. C++ এ একটি বাইনারি ট্রিতে সমস্ত পূর্ণ নোড প্রিন্ট করুন

  3. একটি বাইনারি গাছের সমস্ত অভ্যন্তরীণ নোড C++ এ প্রিন্ট করুন

  4. C++-এ K পাতা সহ একটি বাইনারি ট্রিতে সমস্ত নোড প্রিন্ট করুন