কম্পিউটার

C++ এ বাইনারি ট্রি রাইট সাইড ভিউ


ধরুন আমাদের একটি বাইনারি গাছ আছে, যদি আমরা গাছটিকে ডান দিক থেকে দেখি, তাহলে আমরা এর কিছু উপাদান দেখতে পাব। আমাদের সেই উপাদানগুলি প্রদর্শন করতে হবে। তাই গাছটি যদি −

এর মত হয়

C++ এ বাইনারি ট্রি রাইট সাইড ভিউ

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

  • আমরা dfs-এর জন্য একটি সাহায্য করার পদ্ধতি তৈরি করব। এটি ট্রি_নোড, উত্তর ধরে রাখার জন্য একটি অ্যারে এবং স্তর গ্রহণ করবে। স্তরটি প্রাথমিকভাবে 0। dfs নিচের মত কাজ করবে -
  • যদি নোড শূন্য হয়, তাহলে ফিরে আসুন
  • যদি স্তর =উত্তর অ্যারের দৈর্ঘ্য, তারপর ans অ্যারেতে নোডের মান সন্নিবেশ করান
  • dfs(নোডের ডানদিকে, উত্তর, স্তর + 1)
  • dfs(নোডের বামে, উত্তর, স্তর + 1)
  • প্রধান ফাংশন থেকে গাছের মূল এবং একটি ফাঁকা অ্যারে ব্যবহার করে dfs() কল করুন, স্তরটি প্রাথমিকভাবে 0, তাই এটি হবে dfs(root, ans)

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

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<int> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
class TreeNode{
   public:
      int val;
      TreeNode *left, *right;
      TreeNode(int data){
         val = data;
         left = right = NULL;
      }
};
void insert(TreeNode **root, int val){
   queue<TreeNode*> q;
   q.push(*root);
   while(q.size()){
      TreeNode *temp = q.front();
      q.pop();
      if(!temp->left){
         if(val != NULL)
            temp->left = new TreeNode(val);
         else
            temp->left = new TreeNode(0);
         return;
      } else {
         q.push(temp->left);
      }
      if(!temp->right){
         if(val != NULL)
         temp->right = new TreeNode(val);
      else
         temp->right = new TreeNode(0);
         return;
      } else {
         q.push(temp->right);
      }
   }
}
TreeNode *make_tree(vector<int> v){
   TreeNode *root = new TreeNode(v[0]);
   for(int i = 1; i<v.size(); i++){
      insert(&root, v[i]);
   }
   return root;
}
class Solution {
   public:
   void dfs(TreeNode* node, vector <int>& ans, int level = 0){
      if(!node) return;
      if(level == ans.size())ans.push_back(node->val);
      dfs(node->right, ans, level + 1);
      dfs(node->left, ans, level + 1);
   }
   vector<int> rightSideView(TreeNode* root) {
      vector <int> ans;
      dfs(root, ans);
      return ans;
   }
};
main(){
   vector<int> v = {1,2,3,NULL,5,NULL,4};
   TreeNode *root = make_tree(v);
   Solution ob;
   print_vector(ob.rightSideView(root));
}

ইনপুট

[1,2,3,null,5,null,4]

আউটপুট

[1, 3, 4, ]

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

  2. C++ এ বাইনারি ট্রির সর্বোচ্চ প্রস্থ

  3. C++ এ সর্বাধিক বাইনারি ট্রি

  4. C++ এ বাইনারি ট্রি থেকে বাইনারি সার্চ ট্রি কনভার্সন