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

বাইনারি ট্রি প্রুনিং (০-নেই এমন সাবট্রি মুছে ফেলা) C++-এ


একটি বাইনারি ট্রি দেওয়া আছে যেটির প্রতিটি নোডের মান ০ বা ১। লক্ষ্য হল যেসব সাবট্রিতে ১ নেই, সেগুলো মুছে ফেলা (প্রুন করা)।

রিকার্সিভ পদ্ধতিতে সমাধান: নোড নাল হলে নাল রিটার্ন। বাম ও ডান সাবট্রি প্রুন করুন। যদি বাম ও ডান নাল হয় এবং নোডের মান ০ হয়, তবে নাল রিটার্ন। অন্যথায় নোড রিটার্ন।

উদাহরণ

ইনপুট ট্রি: (চিত্রে দেখানো)

আউটপুট (ইনঅর্ডার ট্রাভার্সাল): ১, ১, ১, ১, ০, ১

C++ কোড উদাহরণ
#include 
using namespace std;

class TreeNode{
public:
    int val;
    TreeNode *left, *right;
    TreeNode(int data){
        val = data;
        left = right = NULL;
    }
};

void inorder(TreeNode *root){
    if(root){
        inorder(root->left);
        cout << root->val << ", ";
        inorder(root->right);
    }
}

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;
    }
};

int main(){
    TreeNode *root = new TreeNode(1);
    root->left = new TreeNode(1);
    root->right = new TreeNode(0);
    root->left->left = new TreeNode(1);
    root->left->right = new TreeNode(1);
    root->right->left = new TreeNode(0);
    root->right->right = new TreeNode(1);
    root->left->left->left = new TreeNode(0);
    Solution ob;
    inorder(ob.pruneTree(root));
    return 0;
}
আউটপুট

প্রুন করা ট্রির ইনঅর্ডার আউটপুট:

1, 1, 1, 1, 0, 1,
  1. দুই বাইনারি ট্রি মার্জ (মার্জ) করা C++-এ

  2. C++-এ দেওয়া বাইনারি ট্রি হিপ (Heap) কিনা তা যাচাই করুন

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

  4. C++-এ একটি বাইনারি ট্রি SumTree কিনা তা যাচাই করা