Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C भाषा में बाइनरी ट्री का राइट व्यू प्रिंट करना


कार्य दिए गए बाइनरी ट्री के दाएं नोड्स को प्रिंट करना है। सबसे पहले उपयोगकर्ता बाइनरी ट्री बनाने के लिए डेटा डालेगा और फिर बने ट्री का राइट व्यू प्रिंट करेगा।

C भाषा में बाइनरी ट्री का राइट व्यू प्रिंट करना

उपरोक्त आरेख 10, 42, 93, 14, 35, 96, 57 और 88 नोड्स के साथ बने बाइनरी ट्री को दिखाता है। इन नोड्स में से जो ट्री के दाईं ओर स्थित हैं उन्हें चुना जाता है और स्क्रीन पर प्रदर्शित किया जाता है। उदाहरण के लिए, 10, 93, 57 और 88 बाइनरी ट्री के दायें सबसे नोड्स हैं।

उदाहरण

इनपुट: 10 42 93 14 35 96 57 88
आउटपुट: 10 93 57 88

प्रत्येक नोड के साथ दो पॉइंटर जुड़े होते हैं यानी लेफ्ट और राइट। इस प्रश्न के अनुसार, प्रोग्राम को केवल दाएं नोड्स को ट्रैवर्स करना होगा। इसलिए नोड के लेफ्ट चाइल्ड के बारे में चिंता करने की कोई आवश्यकता नहीं है।

राइट व्यू उन सभी नोड्स को संग्रहीत करता है जो अपने लेवल के अंतिम नोड्स हैं। इसलिए, हम केवल रिकर्सिव दृष्टिकोण का उपयोग करके नोड्स को इस तरह से संग्रहीत और एक्सेस कर सकते हैं कि राइट सबट्री को लेफ्ट सबट्री से पहले ट्रैवर्स किया जाए। जब भी प्रोग्राम उस नोड का पता लगाता है जिसका लेवल पिछले नोड के लेवल से अधिक होता है तो पिछले नोड को प्रदर्शित किया जाता है क्योंकि यह अपने लेवल का अंतिम नोड होगा।

एल्गोरिदम

शुरुआत
चरण 1 → नोड वेरिएबल को संरचना टाइप का बनाएं
   int data घोषित करें
   *left, *right का उपयोग करके नोड टाइप का पॉइंटर घोषित करें
चरण 2 → पैरामीटर के रूप में item के साथ नोड डालने का फंक्शन बनाएं
   malloc का उपयोग करके temp वेरिएबल नोड का बनाएं
   temp->data = item सेट करें
   temp->left = temp->right = NULL सेट करें
   temp रिटर्न करें
चरण 3 → void right_view(struct node *root, int level, int *end_level) फंक्शन घोषित करें
   यदि root = NULL तो रिटर्न
   यदि *end_level < level तो
      root->data प्रिंट करें
      *end_level = level सेट करें
   right_view(root->right, level+1, end_level) कॉल करें
   right_view(root->left, level+1, end_level) कॉल करें
चरण 4 → void right(struct node *root) फंक्शन घोषित करें
   int level = 0 सेट करें
   right_view(root, 1, &level) कॉल करें
चरण 5 → main() में
   struct node *root = New(10) का उपयोग करके ट्री नोड्स के लिए मान पास करें
   right(root) कॉल करें
समाप्त

उदाहरण

#include <stdio.h>
#include <stdlib.h>
struct node {
    int data;
    struct node *left, *right;
};
struct node *New(int item) {
    struct node *temp = (struct node *)malloc(sizeof(struct node));
    temp->data = item;
    temp->left = temp->right = NULL;
    return temp;
}
void right_view(struct node *root, int level, int *end_level) {
    if (root == NULL) return;
    if (*end_level < level) {
        printf("%d\t", root->data);
        *end_level = level;
    }
    right_view(root->right, level+1, end_level);
    right_view(root->left, level+1, end_level);
}
void right(struct node *root) {
    int level = 0;
    right_view(root, 1, &level);
}
int main() {
    printf("right view of a binary tree is : ");
    struct node *root = New(10);
    root->left = New(42);
    root->right = New(93);
    root->left->left = New(14);
    root->left->right = New(35);
    root->right->left = New(96);
    root->right->right = New(57);
    root->right->left->right = New(88);
    right(root);
    return 0;
}

आउटपुट

यदि हम उपरोक्त प्रोग्राम चलाते हैं तो यह निम्नलिखित आउटपुट उत्पन्न करेगा।

right view of a binary tree is : 10 93 57 88

  1. C++ प्रोग्राम: बाइनरी ट्री में लीफ नोड्स को बाएं से दाएं एक स्टैक का उपयोग करके प्रिंट करना C++ प्रोग्राम: बाइनरी ट्री में लीफ नोड्स को बाएं से दाएं एक स्टैक का उपयोग करके प्रिंट करना

    प्रोग्राम को बाइनरी ट्री के लीफ नोड्स को बाएं से दाएं प्रिंट करना चाहिए लेकिन चुनौती केवल एक स्टैक का उपयोग करना है। push() फ़ंक्शन के माध्यम से बाइनरी ट्री के नोड्स डालें और pop() ऑपरेशन के माध्यम से लीफ नोड्स प्रदर्शित करें। लीफ नोड्स अंतिम नोड्स हैं जिनका बाएं और दाएं पॉइंटर NULL होता है जिसका अर

  1. Python से बाइनरी ट्री में दिए गए नोड के दाएं वाले नोड को कैसे ढूंढें? Python से बाइनरी ट्री में दिए गए नोड के दाएं वाले नोड को कैसे ढूंढें?

    लेवल ऑर्डर ट्रैवर्सल (BFS) से दिए गए नोड के उसी लेवल पर दाएं पड़ोसी नोड को ढूंढें। एल्गोरिदम क्यू से BFS, लेवल दर लेवल प्रोसेस करें। प्रत्येक लेवल के नोड्स को temp लिस्ट में स्टोर करें। अगर टारगेट नोड u मिले तो उसका इंडेक्स नोट करें। अगर इंडेक्स अंतिम है तो None रिटर्न (दाएं कोई नहीं)। अन्यथा temp[

  1. बाइनरी ट्री में दूसरा सबसे गहरा नोड ज्ञात करने का पायथन प्रोग्राम बाइनरी ट्री में दूसरा सबसे गहरा नोड ज्ञात करने का पायथन प्रोग्राम

    मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें दूसरे सबसे गहरे लीफ की गहराई ढूंढनी है। यदि कई सबसे गहरे लीफ हैं, तो दूसरा सबसे गहरा लीफ नोड अगला सबसे ऊंचा होगा। जैसा कि हम जानते हैं रूट की गहराई 0 होती है। उदाहरण के लिए, यदि इनपुट इस तरह है: तो आउटपुट 1 होगा, क्योंकि दूसरा सबसे गहरा नोड 3 है। इसे हल