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

প্রिअর্ডার ট্রভারসাল থেকে ফুল k-এরি ট্রি নির্মাণ C++-এ


আমাদের একটি অ্যারে arr[] দেওয়া আছে যেটি k-এরি ট্রির প্রিঅর্ডার ট্রভারসাল ধারণ করে। লক্ষ্য হলো একই k-এরি ট্রি পুনরায় নির্মাণ করা এবং এর পোস্টঅর্ডার ট্রভারসাল প্রিন্ট করা। একটি ফুল k-এরি ট্রি বলতে একে বুঝায় যেটিতে রুট নোডের ০ বা k সংখ্যক চাইল্ড থাকে।

ইনপুট

int arr[] = {2, 5, 1, 3, 6, 7, 2, 1}, int size = 8, int children = 2

আউটপুট

প্রিঅর্ডার ট্রভারসাল থেকে দুটি চাইল্ড বিশিষ্ট ফুল k-এরি ট্রি নির্মিত হলো:

প্রिअর্ডার ট্রভারসাল থেকে ফুল k-এরি ট্রি নির্মাণ C++-এ

ব্যাখ্যা

আমাদের k চাইল্ড = ২ দিয়ে একটি ট্রির প্রিঅর্ডার ট্রভারসাল দেওয়া আছে। তৈরি ট্রির পোস্টঅর্ডার ট্রভারসাল হবে: 3 6 1 2 1 7 5 2।

ইনপুট

int arr[] = {2, 5, 1, 3, 6, 7, 2, 1}, int size = 8, int children = 3

আউটপুট

প্রিঅর্ডার ট্রভারসাল থেকে তিনটি চাইল্ড বিশিষ্ট ফুল k-এরি ট্রি নির্মিত হলো:

প্রिअর্ডার ট্রভারসাল থেকে ফুল k-এরি ট্রি নির্মাণ C++-এ

ব্যাখ্যা

আমাদের k চাইল্ড = ৩ দিয়ে একটি ট্রির প্রিঅর্ডার ট্রভারসাল দেওয়া আছে। তৈরি ট্রির পোস্টঅর্ডার ট্রভারসাল হবে: 3 6 1 2 1 7 5 2।

প্রোগ্রামে ব্যবহৃত পদ্ধতি:

এই পদ্ধতিতে প্রথমে দেয়া অ্যারে থেকে প্রথম এলিমেন্টকে রুট নোড হিসেবে নিয়ে k-এরি ট্রি নির্মাণ করা হয়। লেফট সাবট্রি খালি হলে রাইট সাবট্রিও খালি হবে। রিকারসিভলি লেফট ও রাইট সাবট্রি কল করে লিঙ্ক করা হয়। পোস্টঅর্ডার ট্রভারসালের জন্য: লেফট সাবট্রি, তারপর রাইট সাবট্রি, তারপর নোডের ওজন প্রিন্ট করা হয়।

  • postorder(root->left) কল করা হয়
  • postorder(root->right) কল করা হয়
  • root->data প্রিন্ট করা হয়
  • ইনপুট অ্যারে হিসেবে arr[] নেওয়া হয়
  • k ভেরিয়েবল হিসেবে children নেওয়া হয়
  • স্টার্টিং ইনডেক্স হিসেবে count=0 নেওয়া হয়
  • Tree_Node* node = create_tree(arr, size, children, count) দিয়ে ট্রি নির্মাণ
  • new_Node(int data) ফাংশন নতুন ট্রি নোড জেনারেট করে
  • create_tree(int arr[], int N, int k, int height, int& count) ফাংশন অ্যারে থেকে k-এরি ট্রি তৈরি করে
  • নোড সংখ্যা <=0 হলে NULL রিটার্ন
  • newNode = new_Node(arr[count]) প্রথম এলিমেন্ট দিয়ে ইনিশিয়ালাইজ
  • ফর লুপ i=0 থেকে i<k পর্যন্ত ট্রভারস
  • শর্তমতো কাউন্ট বাড়িয়ে রিকারসিভ কল এবং NULL পুশ
  • create_tree(int* arr, int N, int k, int count) ফাংশন ট্রির হাইট রিটার্ন করে
  • হাইট ক্যালকুলেশন: ceil(log((double)N * (k-1) + 1) / log((double)k))
  • postorder_traversal(Tree_Node* node, int k) ফাংশন পোস্টঅর্ডার প্রিন্ট করে

উদাহরণ

#include <bits/stdc++.h>
using namespace std;

struct Tree_Node {
    int address;
    vector<Tree_Node*> root;
};

Tree_Node* new_Node(int data) {
    Tree_Node* newNode = new Tree_Node;
    newNode->address = data;
    return newNode;
}

Tree_Node* create_tree(int arr[], int N, int k, int height, int& count) {
    if (N <= 0) {
        return NULL;
    }
    Tree_Node* newNode = new_Node(arr[count]);
    if (newNode == NULL) {
        cout << "Code Dumped";
        return NULL;
    }
    for (int i = 0; i < k; i++) {
        if (count < N - 1 && height > 1) {
            count++;
            newNode->root.push_back(create_tree(arr, N, k, height - 1, count));
        } else {
            newNode->root.push_back(NULL);
        }
    }
    return newNode;
}

Tree_Node* create_tree(int* arr, int N, int k, int count) {
    int height = (int)ceil(log((double)N * (k - 1) + 1) / log((double)k));
    return create_tree(arr, N, k, height, count);
}

void preorder_traversal(Tree_Node* node, int k) {
    if (node == NULL) {
        return;
    }
    for (int i = 0; i < k; i++) {
        preorder_traversal(node->root[i], k);
    }
    cout << node->address << " ";
}

int main() {
    int arr[] = {2, 5, 1, 3, 6, 7, 2, 1};
    int size = 8;
    int children = 2;
    int count = 0;
    Tree_Node* node = create_tree(arr, size, children, count);
    cout << "Construct the full k-ary tree from its preorder traversal are: ";
    preorder_traversal(node, children);
    return 0;
}

আউটপুট

Construct the full k-ary tree from its preorder traversal are: 3 6 1 2 1 7 5 2

  1. C++-এ একটি অ্যারে বাইনারি সার্চ ট্রির প্রি-অর্ডার ট্রাভার্সাল রিপ্রেজেন্ট করে কিনা চেক করা

  2. পাইথনে প্রिअর্ডার এবং পোস্টঅর্ডার ট্রাভার্সাল থেকে বাইনারি ট্রি কনস্ট্রাক্ট করুন

  3. পাইথনে প্রिअর্ডার ট্রভার্সাল থেকে বাইনারি সার্চ ট্রি নির্মাণ

  4. পাইথনে প্রिअর্ডার এবং ইনঅর্ডার ট্রাভার্সাল থেকে বাইনারি ট্রি কনস্ট্রাক্ট করা