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

C++ में बाइनरी सर्च ट्री को सिंगली लिंक्ड लिस्ट में बदलना


मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें इसे इन-प्लेस (in-place) एक सिंगली लिंक्ड लिस्ट में बदलना है।

उदाहरण के लिए, दिए गए ट्री के लिए आउटपुट एक सॉर्टेड लिंक्ड लिस्ट होगी।

C++ में बाइनरी सर्च ट्री को सिंगली लिंक्ड लिस्ट में बदलना

C++ में बाइनरी सर्च ट्री को सिंगली लिंक्ड लिस्ट में बदलना

समाधान दृष्टिकोण (रिवर्स इनऑर्डर ट्रैवर्सल)

  • prev := NULL सेट करें।
  • एक रिकर्सिव फ़ंक्शन solve() परिभाषित करें जो रूट लेता है।
  • यदि रूट NULL है, तो वापस लौटें।
  • solve(root->right) कॉल करें (पहले राइट सबट्री)।
  • solve(root->left) कॉल करें (फिर लेफ्ट सबट्री)।
  • root->right = prev, root->left = NULL सेट करें।
  • prev = root अपडेट करें।

यह रिवर्स इनऑर्डर (दाएं-जड़-बाएं) ट्रैवर्सल नोड्स को अवरोही क्रम में प्रोसेस करता है, और प्रत्येक नोड के राइट पॉइंटर को पिछले नोड से जोड़कर लिंक्ड लिस्ट बनाता है।

उदाहरण (C++ कोड)

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

class TreeNode { 
public: 
    int val; 
    TreeNode *left, *right; 
    TreeNode(int data) { 
        val = data; 
        left = NULL; 
        right = NULL; 
    } 
}; 

class Solution { 
public: 
    TreeNode* prev = NULL; 
    void flatten(TreeNode* root) { 
        if (!root) return; 
        flatten(root->right); 
        flatten(root->left); 
        root->right = prev; 
        root->left = NULL; 
        prev = root; 
    } 
}; 

int main() { 
    // ट्री निर्माण कोड... 
    Solution ob; 
    ob.flatten(root); 
    // लिंक्ड लिस्ट प्रिंट करें 
    return 0; 
}

इनपुट

{1,2,5,3,4}

आउटपुट

1, 2, 3, 4, 5,

  1. C++ में बाइनरी ट्री को लिंक्ड लिस्ट में फ्लैट करना C++ में बाइनरी ट्री को लिंक्ड लिस्ट में फ्लैट करना

    मान लीजिए हमारे पास एक बाइनरी ट्री है। हमें इसे स्थानांतरित (in-place) करके लिंक्ड लिस्ट में बदलना है (दायाँ पॉइंटर अगले नोड को इंगित करे, बायाँ पॉइंटर null हो)। उदाहरण: ट्री [1,2,5,3,4] → फ्लैट लिस्ट: 1→2→3→4→5 (प्रीऑर्डर ट्रैवर्सल क्रम)। रिवर्स प्रीऑर्डर ट्रैवर्सल ग्लोबल prev = null रखें। रिकर

  1. C++ में बाइनरी खोज प्रोग्राम C++ में बाइनरी खोज प्रोग्राम

    बाइनरी खोज क्या है? बाइनरी खोज (आधा-अंतराल खोज) एक खोज एल्गोरिदम है जो क्रमबद्ध सरणी में लक्ष्य मान की स्थिति ढूंढता है। यह लक्ष्य मान की तुलना मध्य तत्व से करता है और खोज स्थान को आधा कर देता है। मुख्य बिंदु केवल क्रमबद्ध सरणी पर काम करता है समय जटिलता: O(log n) दुनिया के सभी नाम क्रमबद्ध हों तो

  1. पायथन में लिंक्ड लिस्ट को जिग-जैग बाइनरी ट्री में बदलने का प्रोग्राम पायथन में लिंक्ड लिस्ट को जिग-जैग बाइनरी ट्री में बदलने का प्रोग्राम

    मान लीजिए हमारे पास एक सिंगली लिंक्ड लिस्ट है, हमें इसे निम्न नियमों का उपयोग करके बाइनरी ट्री पथ में बदलना है:लिंक्ड लिस्ट का हेड रूट है।प्रत्येक बाद का नोड पैरेंट का बायां बच्चा है यदि उसका मान कम है, अन्यथा यह दायां बच्चा होगा।उदाहरण के लिए, यदि इनपुट [2,1,3,4,0,5] है, तो आउटपुट ट्री होगा:समाधान