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

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


मान लीजिए हमारे पास एक बाइनरी ट्री है। हमें इसे स्थानांतरित (in-place) करके लिंक्ड लिस्ट में बदलना है (दायाँ पॉइंटर अगले नोड को इंगित करे, बायाँ पॉइंटर null हो)।

उदाहरण: ट्री [1,2,5,3,4] → फ्लैट लिस्ट: 1→2→3→4→5 (प्रीऑर्डर ट्रैवर्सल क्रम)।

रिवर्स प्रीऑर्डर ट्रैवर्सल

  1. ग्लोबल prev = null रखें।
  2. रिकर्सिव flatten(root):
    • यदि रूट null है, तो लौटें।
    • flatten(root->right) (पहले दायाँ)।
    • flatten(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() {
    // ट्री बनाने और टेस्ट करने का कोड
    return 0;
}

इनपुट

[1,2,5,3,4]

आउटपुट

1, 2, 3, 4, 5,
  1. C++ में अधिकतम बाइनरी ट्री II C++ में अधिकतम बाइनरी ट्री II

    मान लीजिए हमारे पास एक अधिकतम ट्री का रूट नोड है: अधिकतम ट्री एक ट्री है जहां प्रत्येक नोड का मान उसके सबट्री में किसी भी अन्य मान से अधिक होता है। मान लीजिए हमारे पास construct() नामक एक विधि है। यह सूची A से एक रूट बना सकती है। construct() विधि इस तरह है: यदि सूची A खाली है, तो null लौटाएं। अन्य

  1. C++ में बाइनरी ट्री प्रूनिंग C++ में बाइनरी ट्री प्रूनिंग

    मान लीजिए हमारे पास एक बाइनरी ट्री का हेड नोड root है, जहाँ प्रत्येक नोड का मान या तो 0 या 1 है। हमें वही ट्री लौटाना है जहाँ हर वह सबट्री हटा दी गई हो जिसमें 1 नहीं है। उदाहरण: इनपुट ट्री [1,1,0,1,1,0,1,0] के लिए, आउटपुट ट्री में केवल वही नोड्स रहेंगे जिनके सबट्री में कम से कम एक 1 है। पोस्ट-ऑर्

  1. C++ में बाइनरी ट्री का लेवल ऑर्डर ट्रैवर्सल (Binary Tree Level Order Traversal) C++ में बाइनरी ट्री का लेवल ऑर्डर ट्रैवर्सल (Binary Tree Level Order Traversal)

    मान लीजिए हमारे पास एक बाइनरी ट्री है। हमें इस ट्री को लेवल ऑर्डर ट्रैवर्सल योजना का उपयोग करके पार करना है। यदि ट्री इस तरह है: ट्रैवर्सल अनुक्रम इस तरह होगा: [10, 5, 16, 8, 15, 20, 23] इसे हल करने के लिए हम निम्नलिखित चरणों का पालन करेंगे: नोड्स संग्रहीत करने के लिए कतार que परिभाषित करें रूट क