प्रोग्राम को बाइनरी ट्री के मध्य स्तर को प्रिंट करना चाहिए उदा। यदि बाइनरी ट्री में 4 स्तर हैं, तो प्रोग्राम को स्तर 2 नोड्स को प्रिंट करना होगा, लेकिन यहां मांग ऊंचाई का पता लगाए बिना स्तर की गणना करने की है।
परफेक्ट बाइनरी ट्री एक ऐसा पेड़ है जिसमें आंतरिक नोड्स में दो बच्चे होने चाहिए और सभी लीव नोड्स एक ही स्तर या गहराई पर होने चाहिए।
यहां,
-
आंतरिक नोड 21 और 32 दोनों में बच्चे हैं
-
लीफ नोड्स 41, 59, 33 और 70 सभी एक ही स्तर पर स्थित हैं।
चूंकि यह दोनों गुणों को संतुष्ट करता है, इसलिए यह एक आदर्श बाइनरी ट्री है।
उदाहरण
Input : 12 21 32 41 59 33 70 Output : 21 32
यहां उपयोग किया जाने वाला दृष्टिकोण किसी नोड के बाएँ और दाएँ पॉइंटर की जाँच करके लिंक की गई सूची के मध्य तत्वों को खोजने जैसा है, यानी किसी फ़ंक्शन को रिकर्सिव कॉल करके NULL या NOT NULL।
नीचे दिया गया कोड दिए गए एल्गोरिथम के c कार्यान्वयन को दर्शाता है।
एल्गोरिदम
START Step 1 -> create node variable of type structure Declare int key Declare pointer of type node using *left, *right Step 2 -> create function for inserting node with parameter as value Declare temp variable of node using malloc Set temp->data = value Set temp->left = temp->right = NULL return temp step 3 - > Declare Function void middle(struct Node* a, struct Node* b) IF a = NULL||b = NULL Return IF ((b->left == NULL) && (b->right == NULL)) Print a->key Return End Call middle(a->left, b->left->left) Call middle(a->right, b->left->left) Step 4 -> Declare Function void mid_level(struct Node* node) Call middle(node, node) Step 5 -> In main() Call New passing value user want to insert as struct Node* n1 = New(13); Call mid_level(n1) STOP
उदाहरण
#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