प्रोग्राम को बाइनरी ट्री का मध्य लेवल प्रिंट करना चाहिए। उदाहरण के लिए, यदि बाइनरी ट्री में 4 लेवल हैं तो प्रोग्राम को लेवल 2 के नोड्स प्रिंट करने होंगे लेकिन मांग यह है कि ऊंचाई ढूंढे बिना लेवल की गणना की जाए।
परफेक्ट बाइनरी ट्री वह ट्री है जिसमें इंटीरियर नोड्स के दो बच्चे होने चाहिए और सभी लीफ नोड्स समान लेवल या गहराई पर होने चाहिए।

यहां,
- इंटीरियर नोड्स 21 और 32 दोनों के बच्चे हैं
- लीफ नोड्स 41, 59, 33 और 70 सभी समान लेवल पर हैं।
चूंकि यह दोनों गुणों को पूरा करता है इसलिए यह एक परफेक्ट बाइनरी ट्री है।
उदाहरण
इनपुट: 12 21 32 41 59 33 70 आउटपुट: 21 32
यहां उपयोग किया गया दृष्टिकोण लिंक्ड लिस्ट के मध्य एलिमेंट्स ढूंढने जैसा है नोड के लेफ्ट और राइट पॉइंटर की जांच करके यानी NULL या NOT NULL द्वारा फंक्शन को रिकर्सिव कॉल करके।
एल्गोरिदम
शुरुआत
चरण 1 → नोड वेरिएबल को संरचना टाइप का बनाएं
int key घोषित करें
*left, *right का उपयोग करके नोड टाइप का पॉइंटर घोषित करें
चरण 2 → पैरामीटर के रूप में value के साथ नोड डालने का फंक्शन बनाएं
malloc का उपयोग करके temp वेरिएबल नोड का बनाएं
temp->data = value सेट करें
temp->left = temp->right = NULL सेट करें
temp रिटर्न करें
चरण 3 → void middle(struct Node* a, struct Node* b) फंक्शन घोषित करें
यदि a = NULL || b = NULL तो रिटर्न
यदि ((b->left == NULL) && (b->right == NULL)) तो
a->key प्रिंट करें
रिटर्न
middle(a->left, b->left->left) कॉल करें
middle(a->right, b->left->left) कॉल करें
चरण 4 → void mid_level(struct Node* node) फंक्शन घोषित करें
middle(node, node) कॉल करें
चरण 5 → main() में
struct Node* n1 = New(13) के रूप में मान पास करें
mid_level(n1) कॉल करें
समाप्त
उदाहरण
#include <stdio.h>
#include <stdlib.h>
struct Node {
int key;
struct Node* left, *right;
};
struct Node* New(int value) {
struct Node* temp = (struct Node*)malloc(sizeof(struct Node));
temp->key = value;
temp->left = temp->right = NULL;
return (temp);
}
void middle(struct Node* a, struct Node* b) {
if (a == NULL || b == NULL)
return;
if ((b->left == NULL) && (b->right == NULL)) {
printf("%d ", a->key);
return;
}
middle(a->left, b->left->left);
middle(a->right, b->left->left);
}
void mid_level(struct Node* node) {
middle(node, node);
}
int main() {
printf("middle level nodes are : ");
struct Node* n1 = New(13);
struct Node* n2 = New(21);
struct Node* n3 = New(44);
struct Node* n4 = New(98);
struct Node* n5 = New(57);
struct Node* n6 = New(61);
struct Node* n7 = New(70);
n2->left = n4;
n2->right = n5;
n3->left = n6;
n3->right = n7;
n1->left = n2;
n1->right = n3;
mid_level(n1);
}
आउटपुट
यदि हम उपरोक्त प्रोग्राम चलाते हैं तो यह निम्नलिखित आउटपुट उत्पन्न करेगा।
middle level nodes are : 21 44