Cho cây nhị phân, tìm phần tử lớn nhất ở mỗi cấp độ. Ví dụ cây cho kết quả [3,5,8].
Giải thuật
- Mảng
anslưu kết quả. - Hàm đệ quy
solve(node, level):- Nếu
node == nulltrả về. - Nếu
level == ans.size()thêmnode->valvàoans; ngược lạians[level] = max(ans[level], node->val). - Gọi
solve(node->left, level+1)vàsolve(node->right, level+1).
- Nếu
- Gọi
solve(root, 0), trả vềans.
Ví dụ mã 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;
}
};
Đầu vào
[1,3,2,5,3,null,9]
Đầu ra
[1, 3, 9, ]