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

C++ में सेम ट्री


समस्या विवरण

मान लीजिए हमारे पास दो बाइनरी ट्री हैं; हमें एक फ़ंक्शन परिभाषित करना है जो जांचे कि वे समान हैं या नहीं। हम जानते हैं कि बाइनरी ट्री को समान माना जाता है जब वे संरचनात्मक रूप से समान होते हैं और नोड्स का मान समान होता है।

उदाहरण

यदि इनपुट है: [1,2,3], [1,2,3], तो आउटपुट होगा True

हल करने का दृष्टिकोण

इस समस्या को हल करने के लिए निम्नलिखित चरणों का पालन करें (रिकर्सिव दृष्टिकोण):

  • isSameTree नामक एक फ़ंक्शन परिभाषित करें, जो दो ट्री नोड्स p और q लेता है
  • यदि p, NULL के समान है और q, NULL के समान है:
    • true लौटाएं
  • यदि p, NULL के समान है या q, NULL के समान है:
    • false लौटाएं
  • यदि p का मान, q के मान के समान है और isSameTree(p का लेफ्ट, q का लेफ्ट) true है और isSameTree(p का राइट, q का राइट) true है:
    • true लौटाएं
  • false लौटाएं

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;
    }
};

void insert(TreeNode **root, int val) {
    queue<TreeNode*> q;
    q.push(*root);
    while(q.size()) {
        TreeNode *temp = q.front();
        q.pop();
        if(!temp->left) {
            if(val != NULL)
                temp->left = new TreeNode(val);
            else
                temp->left = new TreeNode(0);
            return;
        } else {
            q.push(temp->left);
        }
        if(!temp->right) {
            if(val != NULL)
                temp->right = new TreeNode(val);
            else
                temp->right = new TreeNode(0);
            return;
        } else {
            q.push(temp->right);
        }
    }
}

TreeNode *make_tree(vector<int> v) {
    TreeNode *root = new TreeNode(v[0]);
    for(int i = 1; i < v.size(); i++) {
        insert(&root, v[i]);
    }
    return root;
}

class Solution {
public:
    bool isSameTree(TreeNode *p, TreeNode* q) {
        if (p == NULL && q == NULL)
            return true;
        if (p == NULL || q == NULL)
            return false;
        if (p->val == q->val && isSameTree(p->left, q->left) && isSameTree(p->right, q->right))
            return true;
        return false;
    }
};

int main() {
    Solution ob;
    vector<int> v = {1,2,3}, v1 = {1,2,3};
    TreeNode *root1 = make_tree(v);
    TreeNode *root2 = make_tree(v1);
    cout << (ob.isSameTree(root1, root2));
    return 0;
}

इनपुट

{1,2,3}, {1,2,3}

आउटपुट

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

    मान लीजिए हमें एक बाइनरी ट्री को m×n 2D स्ट्रिंग सरणी में इन नियमों के आधार पर प्रदर्शित करना है: पंक्ति संख्या m दी गई बाइनरी ट्री की ऊंचाई के समान होनी चाहिए। स्तंभ संख्या n हमेशा एक विषम संख्या होनी चाहिए। रूट नोड का मान पहली पंक्ति के ठीक बीच में रखा जाना चाहिए जहां इसे रखा जा सकता है। वह स्तं

  1. C++ में ट्री डायमीटर C++ में ट्री डायमीटर

    मान लीजिए हमारे पास एक अनडायरेक्टेड ट्री है; हमें इसका डायमीटर ढूंढना है - उस ट्री में सबसे लंबे पथ में एज की संख्या उस ट्री का डायमीटर है। यहां ट्री को एज लिस्ट के रूप में दिया गया है जहां edges[i] = [u, v] नोड्स u और v के बीच एक बायडायरेक्शनल एज है। प्रत्येक नोड के लेबल सेट {0, 1, ..., edges.lengt

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

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