मान लीजिए हमारे पास एक बाइनरी ट्री है। हमें ट्री के प्रत्येक लेवल का सबसे बड़ा तत्व ढूंढना है।
उदाहरण: ट्री [1,3,2,5,3,null,9] के लिए आउटपुट [1,3,9] होगा (लेवल 0: 1, लेवल 1: max(3,2)=3, लेवल 2: max(5,3,9)=9)।
DFS + लेवल ट्रैकिंग
- एक सरणी
ansबनाएँ जहाँans[level]उस लेवल का अधिकतम मान स्टोर करे। - रिकर्सिव फंक्शन
solve(node, level):- यदि
nodenull है, तो लौटें। - यदि
level == ans.size(), तोans.push_back(node->val)। - अन्यथा
ans[level] = max(ans[level], node->val)। solve(node->left, level+1)औरsolve(node->right, level+1)कॉल करें।
- यदि
- मुख्य फंक्शन से
solve(root, 0)कॉल करें औरansलौटाएँ।
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; }
};
class Solution {
public:
vector<int> ans;
void solve(TreeNode* node, int level = 0) {
if (!node) return;
if (level == ans.size()) ans.push_back(node->val);
else ans[level] = max(ans[level], node->val);
solve(node->left, level + 1);
solve(node->right, level + 1);
}
vector<int> largestValues(TreeNode* root) {
solve(root);
return ans;
}
};
int main() {
// ट्री बनाने का कोड
Solution ob;
// auto res = ob.largestValues(root);
// प्रिंट करें
return 0;
}
इनपुट
[1,3,2,5,3,null,9]
आउटपुट
[1, 3, 9, ]