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

C++-এ কন্টিনিউআস ট্রি (Continuous Tree) যাচাই

একটি কন্টিনিউআস ট্রি হলো এমন ট্রি যেখানে রুট থেকে লিফ নোড পর্যন্ত যেকোনো পথে প্যারেন্ট নোড এবং তার সরাসরি চাইল্ড নোডের ওয়েটের আসল পার্থক্য (absolute difference) সবসময় ১ থাকে।

অর্থাৎ, যেকোনো নোডের জন্য: |weight(node) - weight(left child)| = 1 এবং |weight(node) - weight(right child)| = 1।

অ্যালগরিদম: ট্রি কন্টিনিউআস কিনা যাচাই

  • যদি root == NULL, return true (1)।
  • যদি লিফ নোড হয়, return true (এই পথে কন্টিনিউইটি রক্ষা হয়েছে)।
  • যদি লেফট সাবট্রি খালি হয়, করেন্ট নোড ও রাইট চাইল্ডের পার্থক্য ১ কিনা চেক করে রাইট সাবট্রির জন্য রিকার্সিভ কল।
  • যদি রাইট সাবট্রি খালি হয়, করেন্ট নোড ও লেফট চাইল্ডের পার্থক্য ১ চেক করে লেফট সাবট্রির জন্য রিকার্সিভ কল।
  • অন্যথায়, উভয় চাইল্ডের সাথে পার্থক্য ১ এবং উভয় সাবট্রি রিকার্সিভলি কন্টিনিউআস কিনা চেক।

পসিউডোকোড

struct btreeNode{
    int data;
    btreeNode* left, * right;
};

int isContinuous(btreeNode *root){
    if (root == NULL) return 1;
    if (root->left == NULL && root->right == NULL) return 1;
    if (root->left == NULL)
        return (abs(root->data - root->right->data) == 1) && isContinuous(root->right);
    if (root->right == NULL)
        return (abs(root->data - root->left->data) == 1) && isContinuous(root->left);
    return abs(root->data - root->left->data)==1 &&
           abs(root->data - root->right->data)==1 &&
           isContinuous(root->left) &&
           isContinuous(root->right);
}

চিত্রগুলো কন্টিনিউআস এবং নন-কন্টিনিউআস ট্রির উদাহরণ দেখাচ্ছে।

  1. C++-এ বাইনারি ট্রিতে সর্বোচ্চ পথ যোগফল

  2. বাইনারি ট্রির দুটি নোডের মধ্যকার দূরত্ব বের করা C++-তে

  3. C++-এ বাইনারি ট্রিতে চাইল্ড্রেন সম প্রপার্টি যাচাই করা

  4. C++ তে বাইনারি ট্রির অ্যান্টি-ক্লকওয়াইজ স্পাইরাল ট্রাভার্সাল