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

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

समस्या विवरण

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

उदाहरण

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

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

एल्गोरिदम चरण

  • फ़ंक्शन solve(root, prev_data, prev_length) परिभाषित करें:
    • यदि root शून्य है, तो prev_length वापस करें
    • cur_data := root का मान
    • यदि cur_data == prev_data + 1:
      • solve(left, cur_data, prev_length+1) और solve(right, cur_data, prev_length+1) का अधिकतम वापस करें
    • newPathLen := solve(left, cur_data, 1) और solve(right, cur_data, 1) का अधिकतम
    • prev_length और newPathLen का अधिकतम वापस करें
  • मुख्य विधि से:
    • यदि root NULL है, तो 0 वापस करें
    • solve(root, root->val - 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++ में अधिकतम बाइनरी ट्री निर्माण C++ में अधिकतम बाइनरी ट्री निर्माण

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

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

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

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

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