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

সি++-এ বাইনারি ট্রির গভীরতম বিজোড় লেভেল নোডের গভীরতা


প্রথমে স্ট্রাক্ট ডিফাইন করি যা ট্রি নোড রিপ্রেজেন্ট করবে যাতে int key এবং এর বাম ও ডান চাইল্ড নোড থাকে। যদি এটি প্রথম নোড হয় তবে এটি রুট নোড হবে অন্যথায় চাইল্ড নোড।

struct Node { 
    int data; 
    struct Node *leftChild, *rightChild; 
};

পরবর্তীতে createNode(int key) ফাংশন তৈরি করি যা একটি int key মান নেয় এবং সেটি নোডের key মেম্বরে অ্যাসাইন করে। ফাংশনটি তৈরি হওয়া struct Node-এর পয়েন্টার ফেরত দেয়। এছাড়া নতুন নোডের বাম ও ডান চাইল্ড নাল সেট করা হয়।

Node* createNode(int data){ 
    Node* node = new Node; 
    node->data = data; 
    node->leftChild = node->rightChild = NULL; 
    return node; 
}

পরবর্তীতে isLeaf(Node *currentNode) ফাংশন আছে যা একটি নোড নেয় এবং চেক করে এর কি চাইল্ড আছে কিনা। এটি true বা false ফেরত দেয় নোডটি ليف নোড কিনা সেটা ভিত্তি করে।

bool isLeaf(Node *currentNode){ 
    return (currentNode->leftChild == NULL && 
    currentNode->rightChild == NULL); 
}

deepestOddLvlDepth(Node *currentNode, int currentLevel=0) করেন্ট নোড এবং করেন্ট লেভেল নেয়। currentLevel-এর ডিফল্ট মান ০ যদি কোনো মান পাস না করা হয়। যদি currentNode NULL হয় তবে ফাংশন ০ ফেরত দেয়।

int deepestOddLvlDepth(Node *currentNode, int currentLevel=0){ 
    if ( currentNode == NULL) 
        return 0;

currentLevel প্রতিটি রিকার্শন লেভেলে ১ করে বাড়ায় যতক্ষণ বেস কন্ডিশন মিট হয়। তারপর চেক করি currentNode বিজোড় ليف নোড কিনা। বাম ও ডান চাইল্ড ট্রাভার্স করা হয় যতক্ষণ আমাদের গভীরতম বিজোড় লেভেল ليف নোডের ডেপথ পাওয়া যায়। বাম ও ডান চাইল্ড ডেপথের ম্যাক্সিমাম মেইন ফাংশনে ফেরত দেওয়া হয় রেজাল্ট প্রিন্ট করার জন্য।

int deepestOddLvlDepth(Node *currentNode, int currentLevel=0){ 
    if ( currentNode == NULL) 
        return 0; 
    currentLevel ++; 
    if ( currentLevel % 2 != 0 && isLeaf(currentNode)) 
        return currentLevel; 
    int leftChildLevel = deepestOddLvlDepth(currentNode->leftChild,currentLevel); 
    int rightChildLevel = deepestOddLvlDepth(currentNode->rightChild,currentLevel); 
    return max(leftChildLevel,rightChildLevel); 
}

উদাহরণ

বাইনারি ট্রিতে গভীরতম বিজোড় লেভেল নোডের ডেপথ বের করার ইমপ্লিমেন্টেশন:

#include<iostream> 
using namespace std; 

struct Node{ 
    int key; 
    struct Node *leftChild, *rightChild; 
}; 

Node* createNode(int key){ 
    Node* node = new Node; 
    node->key = key; 
    node->leftChild = node->rightChild = NULL; 
    return node; 
} 

bool isLeaf(Node *currentNode){ 
    return (currentNode->leftChild == NULL && 
    currentNode->rightChild == NULL); 
} 

int deepestOddLvlDepth(Node *currentNode, int currentLevel=0){ 
    if ( currentNode == NULL) 
        return 0; 
    currentLevel ++; 
    if ( currentLevel % 2 != 0 && isLeaf(currentNode)) 
        return currentLevel; 
    int leftChildLevel = deepestOddLvlDepth(currentNode->leftChild,currentLevel); 
    int rightChildLevel = deepestOddLvlDepth(currentNode->rightChild,currentLevel); 
    return max(leftChildLevel,rightChildLevel); 
} 

int main(){ 
    Node *root = createNode(15); 
    root->leftChild = createNode(33); 
    root->rightChild = createNode(18); 
    root->rightChild->leftChild = createNode(19); 
    root->rightChild->rightChild = createNode(20); 
    root->rightChild->rightChild->leftChild = createNode(28); 
    root->rightChild->rightChild->rightChild = createNode(29); 
    cout << "The depth of the deepest odd level leaf node is: "<<deepestOddLvlDepth(root) << endl; 
    return 0; 
}

আউটপুট

The depth of the deepest odd level leaf node is: 3
  1. সি++-এ বাইনারি ট্রি ক্যামেরা

  2. বাইনারি ট্রিতে নিকটতম লিফ নোড খুঁজে বের করা (C++)

  3. C++-এ বাইনারি সার্চ ট্রি (BST)-এ সর্বনিম্ন মান্যুক্ত নোড (Node) খুঁজে বের করা

  4. সি++ প্রোগ্রাম: বাইনারি ট্রি (Binary Tree)-এর বিজোড় লেভেল (Odd Level)-এ থাকা নোডগুলো প্রিন্ট করা