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

C++ में बाइनरी ट्री सबसे लंबा लगातार अनुक्रम II


मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें उस बाइनरी ट्री में सबसे लंबे लगातार पथ की लंबाई ढूंढनी है। यहां पथ या तो बढ़ता हुआ या घटता हुआ हो सकता है। इसलिए उदाहरण के लिए [1,2,3,4] और [4,3,2,1] दोनों को वैध पथ माना जाता है, लेकिन पथ [1,2,4,3] वैध नहीं है।

अन्यथा, पथ चाइल्ड-पैरेंट-चाइल्ड अनुक्रम में हो सकता है, जहां पैरेंट-चाइल्ड क्रम आवश्यक नहीं है।

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

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

हम रिकर्सिव दृष्टिकोण का उपयोग करेंगे:

  • solveUtil() फ़ंक्शन नोड लेता है और एक युग्म लौटाता है: (बढ़ता हुआ पथ लंबाई, घटता हुआ पथ लंबाई)।
  • यदि नोड null है, तो {0,0} लौटाएं।
  • बाएं और दाएं के लिए रिकर्सिवली कॉल करें।
  • temp = {1,1} प्रारंभ करें।
  • यदि बायां बच्चा मौजूद है और उसका मान नोड के मान + 1 के बराबर है, तो temp.first अपडेट करें और ans अपडेट करें।
  • यदि दायां बच्चा मौजूद है और उसका मान नोड के मान + 1 के बराबर है, तो temp.first अपडेट करें और ans अपडेट करें।
  • यदि बायां बच्चा मौजूद है और उसका मान नोड के मान - 1 के बराबर है, तो temp.second अपडेट करें और ans अपडेट करें।
  • यदि दायां बच्चा मौजूद है और उसका मान नोड के मान - 1 के बराबर है, तो temp.second अपडेट करें और ans अपडेट करें।
  • ans = max(ans, temp.first + temp.second - 1)।
  • temp लौटाएं।
  • मुख्य विधि में: ans = 0, solveUtil(root) कॉल करें, ans लौटाएं।

उदाहरण

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

#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:    int ans = 0;    pair<int, int> solveUtil(TreeNode* node){       if (!node) {          return { 0, 0 };       }       pair<int, int> left = solveUtil(node->left);       pair<int, int> right = solveUtil(node->right);       pair<int, int> temp = { 1, 1 };       if (node->left && node->left->val == node->val + 1) {          temp.first = max(temp.first, 1 + left.first);          ans = max(ans, temp.first);       }       if (node->right && node->right->val == node->val + 1) {          temp.first = max(temp.first, 1 + right.first);          ans = max(ans, temp.first);       }       if (node->left && node->left->val == node->val - 1) {          temp.second = max(temp.second, 1 + left.second);          ans = max(ans, temp.second);       }       if (node->right && node->right->val == node->val - 1) {          temp.second = max(temp.second, 1 + right.second);          ans = max(ans, temp.second);       }       ans = max({ ans, temp.first + temp.second - 1 });       return temp;    }    int longestConsecutive(TreeNode* root){       ans = 0;       solveUtil(root);       return ans;    } }; main(){    Solution ob;    TreeNode *root = new TreeNode(2);    root->left = new TreeNode(1);    root->right = new TreeNode(3);    cout << (ob.longestConsecutive(root)); }

इनपुट

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

आउटपुट

3

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

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

  1. C++ में अधिकतम बाइनरी ट्री निर्माण C++ में अधिकतम बाइनरी ट्री निर्माण

    मान लीजिए हमारे पास एक पूर्णांक सरणी है जिसके सभी तत्व अद्वितीय हैं। एक अधिकतम बाइनरी ट्री निम्न नियमों से बनता है: रूट सरणी का अधिकतम तत्व होता है। बायाँ सबट्री अधिकतम तत्व के बाएँ भाग से बने सबसरणी का अधिकतम ट्री होता है। दायाँ सबट्री अधिकतम तत्व के दाएँ भाग से बने सबसरणी का अधिकतम ट्री होता है।

  1. C++ में बाइनरी ट्री को बाइनरी सर्च ट्री में रूपांतरण C++ में बाइनरी ट्री को बाइनरी सर्च ट्री में रूपांतरण

    एक बाइनरी ट्री एक विशेष प्रकार का ट्री है जिसमें ट्री का प्रत्येक नोड अधिकतम दो चाइल्ड नोड रख सकता है। इन चाइल्ड नोड्स को राइट चाइल्ड और लेफ्ट चाइल्ड के नाम से जाना जाता है। एक साधारण बाइनरी ट्री है - बाइनरी सर्च ट्री (BST) एक विशेष प्रकार का ट्री है जो निम्नलिखित नियमों का पालन करता है - बाएं चाइ