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

C++ में बाइनरी ट्री में अधिकतम लगातार बढ़ती पथ लंबाई

मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें सबसे लंबे पथ की लंबाई की गणना करनी है जिसमें बढ़ते क्रम में लगातार मूल्यों के साथ नोड्स होते हैं। प्रत्येक नोड को लंबाई 1 के पथ के रूप में माना जाएगा।

तो, अगर इनपुट पसंद है

C++ में बाइनरी ट्री में अधिकतम लगातार बढ़ती पथ लंबाई

तो आउटपुट 3 होगा क्योंकि (11, 12, 13) अधिकतम क्रमागत पथ है।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • एक फ़ंक्शन को हल करें परिभाषित करें (), यह रूट लेगा, prev_data, prev_length,
  • यदि जड़ शून्य नहीं है, तो −
    • वापसी पिछला_लंबाई
  • cur_data :=जड़ का मान
  • यदि cur_data prev_data + 1 के समान है, तो −
    • अधिकतम हल करें (रूट के बाएं, cur_data, prev_length+1) और हल करें (रूट का दायां, cur_data, prev_length+1)
  • newPathLen :=अधिकतम हल (रूट के बाएं, cur_data, 1) और हल (रूट का दायां, cur_data, 1)
  • अधिकतम prev_length और newPathLen लौटाएं
  • मुख्य विधि से निम्न कार्य करें -
  • यदि रूट NULL के समान है, तो −
    • वापसी 0
  • रिटर्न सॉल्व (रूट, वैल ऑफ रूट-1, 0)

उदाहरण (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;
      }
};
int solve(TreeNode *root, int prev_data, int prev_length){
   if (!root)
      return prev_length;
   int cur_data = root->val;
   if (cur_data == prev_data+1){
      return max(solve(root->left, cur_data, prev_length+1), solve(root->right, cur_data, prev_length+1));
   }
   int newPathLen = max(solve(root->left, cur_data, 1), solve(root->right, cur_data, 1));
   return max(prev_length, newPathLen);
}
int maxLen(TreeNode *root){
   if (root == NULL)
      return 0;
   return solve(root, root->val-1, 0);
}
int main(){
   TreeNode *root = new TreeNode(10);
   root->left = new TreeNode(11);
   root->right = new TreeNode(9);
   root->left->left = new TreeNode(13);
   root->left->right = new TreeNode(12);
   root->right->left = new TreeNode(13);
   root->right->right = new TreeNode(8);
   cout << maxLen(root);
   return 0;
}

इनपुट

TreeNode *root = new TreeNode(10);
root->left = new TreeNode(11);
root->right = new TreeNode(9);
root->left->left = new TreeNode(13);
root->left->right = new TreeNode(12);
root->right->left = new TreeNode(13);
root->right->right = new TreeNode(8);

आउटपुट

3

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

    मान लीजिए कि हमारे पास एक पूर्णांक सरणी है। उस सरणी के सभी तत्व अद्वितीय हैं। इस सरणी पर अधिकतम वृक्ष निर्माण को निम्नानुसार परिभाषित किया गया है - जड़ सरणी में अधिकतम संख्या धारण करेगा। लेफ्ट सबट्री सबएरे के बायीं ओर से निर्मित अधिकतम ट्री है जिसे अधिकतम संख्या से विभाजित किया जाता है। दाय

  1. C++ में बाइनरी ट्री में अधिकतम सर्पिल योग

    इस समस्या में हमें एक बाइनरी ट्री दिया जाता है। हमारा काम एक प्रोग्राम बनाना है जो C++ में एक बाइनरी ट्री में अधिकतम सर्पिल योग प्राप्त करेगा। सर्पिल योग बाइनरी ट्री का, बाइनरी ट्री के स्पाइरल ट्रैवर्सल में पाए जाने वाले नोड्स का योग होता है। एक पेड़ के सर्पिल ट्रैवर्सल में, नोड्स को रूट से लीफ न

  1. C++ में एक बाइनरी ट्री में अधिकतम पथ योग

    इस समस्या में, हमें एक बाइनरी ट्री दिया जाता है जिसमें प्रत्येक नोड में एक मान होता है। हमारा काम एक बाइनरी ट्री की दो पत्तियों के बीच अधिकतम पथ योग खोजने के लिए एक प्रोग्राम बनाना है। यहां, हमें एक लीफ नोड से दूसरे लीफ नोड के लिए पथ फॉर्म ढूंढना होगा जो अधिकतम मूल्यों को प्रदान करेगा। इस अधिकतम यो