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

C++ में समान ट्री विभाजन


मान लीजिए हमारे पास n नोड्स वाला एक बाइनरी ट्री है, हमारा कार्य यह जांचना है कि क्या मूल ट्री पर ठीक एक किनारा हटाकर ट्री को दो ट्री में विभाजित करना संभव है जिनके मानों का योग समान हो।

उदाहरण के लिए, यदि इनपुट दिए गए चित्र के अनुसार है, तो आउटपुट true होगा।

हल करने की विधि

हम पोस्ट-ऑर्डर ट्रैवर्सल का उपयोग करके प्रत्येक उपट्री का योग गणना करेंगे:

  • एक स्टैक st परिभाषित करें।
  • solve() फ़ंक्शन नोड लेता है, उसके बाएं और दाएं उपट्री के योग की गणना करता है, वर्तमान योग = मान + बायां योग + दायां योग, स्टैक में डालता है, और वर्तमान योग लौटाता है।
  • मुख्य विधि में:
    • solve(root) कॉल करें।
    • कुल योग = स्टैक का शीर्ष तत्व, पॉप करें।
    • जब तक स्टैक खाली न हो: शीर्ष तत्व x निकालें, y = कुल योग - x। यदि x == y, तो true लौटाएं।
  • false लौटाएं।

उदाहरण

बेहतर समझ के लिए निम्न कार्यान्वयन देखें:

#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:    stack <int> st;    int solve(TreeNode* node){       if (!node)          return 0;       int leftSum = solve(node->left);       int rightSum = solve(node->right);       int curr = node->val + leftSum + rightSum;       st.push(curr);       return curr;    }    bool checkEqualTree(TreeNode* root) {       solve(root);       int totalSum = st.top();       st.pop();       while (!st.empty()) {          int x = st.top();          st.pop();          int y = totalSum - x;          if (x == y)             return true;       }       return false;    } }; main(){    Solution ob;    TreeNode *root = new TreeNode(5);    root->left = new TreeNode(10);    root->right = new TreeNode(10);    root->right->left = new TreeNode(2);    root->right->right = new TreeNode(3);    cout<<(ob.checkEqualTree(root)); }

इनपुट

TreeNode *root = new TreeNode(5); root->left = new TreeNode(10); root->right = new TreeNode(10); root->right->left = new TreeNode(2); root->right->right = new TreeNode(3);

आउटपुट

1

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

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

  1. C++ में दूषित बाइनरी ट्री में तत्व खोजें C++ में दूषित बाइनरी ट्री में तत्व खोजें

    मान लीजिए हमारे पास एक बाइनरी ट्री है। उस ट्री के नियम इस प्रकार हैं: root.val == 0 यदि treeNode.val x है और treeNode.left null नहीं है, तो treeNode.left.val = 2 * x + 1 यदि treeNode.val x है और treeNode.right null नहीं है, तो treeNode.right.val = 2 * x + 2 अब चूंकि बाइनरी ट्री दूषित है। यह इंगि

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

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