কম্পিউটার টিউটোরিয়াল

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


ধরা যাক একটি বাইনারি ট্রির হেড নোড root দেওয়া আছে, যেখানে প্রতিটি নোডের মান হয় 0 অথবা 1। আমরা একই ট্রি রিটার্ন করব যেখানে 1 ধারণ না করে এমন সব সাবট্রি ডিলিট করা থাকবে। যদি ট্রি নিচের মতো হয় −

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


সমাধানের ধাপগুলো −

  • solve() নামে একটি রিকারসিভ মেথড সংজ্ঞা করব, যা নোড নিবে। মেথডটি নিচেরভাবে কাজ করবে −

  • যদি নোড null হয়, তবে null রিটার্ন করব

  • নোডের বাম := solve(নোডের বাম)

  • নোডের ডান := solve(নোডের ডান)

  • যদি নোডের বাম null হয় এবং ডানও null হয় এবং নোডের মান 0 হয়, তবে null রিটার্ন করব

  • নোড রিটার্ন করব

নিচের ইমপ্লিমেন্টেশন দেখুন −

উদাহরণ

#include <bits/stdc++.h> using namespace std; class TreeNode{    public:    int val;    TreeNode *left, *right;    TreeNode(int data){       val = data;       left = NULL;       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){          temp->left = new TreeNode(val);          return;       }else{          q.push(temp->left);       }       if(!temp->right){          temp->right = new TreeNode(val);          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; } void tree_level_trav(TreeNode*root){    if (root == NULL) return;   cout << "[";    queue<TreeNode *> q;    TreeNode *curr;    q.push(root);    q.push(NULL);    while (q.size() > 1) {       curr = q.front();       q.pop();       if (curr == NULL){          q.push(NULL);       } else {          if(curr->left)           q.push(curr->left);          if(curr->right)           q.push(curr->right);          if(curr == NULL){             cout << "null" << ", ";          }else{             cout << curr->val << ", ";          }         }    }    cout << "]"<<endl; } class Solution {    public:    TreeNode* pruneTree(TreeNode* node) {       if(!node)return NULL;       node->left = pruneTree(node->left);       node->right = pruneTree(node->right);       if(!node->left && !node->right && !node->val){          return NULL;       }     return node;    } }; main(){    vector<int> v = {1,1,0,1,1,0,1,0};    TreeNode *root = make_tree(v);    Solution ob;    tree_level_trav(ob.pruneTree(root)); }

ইনপুট

[1,1,0,1,1,0,1,0]

আউটপুট

[1, 1, 0, 1, 1, 1, ]

  1. বাইনারি ট্রির পূর্ণতা যাচাই C++-এ

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

  3. সর্বোচ্চ বাইনারি ট্রি নির্মাণ C++-এ

  4. C++-এ বাইনারি ট্রি থেকে বাইনারি সার্চ ট্রি (BST) কনভার্ট করুন