หาค่าสูงสุดแต่ละระดับของต้นไม้แบนารี (Find Largest Value in Each Tree Row)
ให้ต้นไม้แบนารี หาค่าสูงสุดในแต่ละระดับ (level) ของต้นไม้
ตัวอย่าง: ต้นไม้ [1,3,2,5,3,null,9] → ผลลัพธ์ [3,5,9] (ระดับ 0: 1, ระดับ 1: max(3,2)=3, ระดับ 2: max(5,3,9)=9)
ขั้นตอนการแก้ปัญหา (DFS)
- สร้างเวกเตอร์
ansเก็บค่าสูงสุดแต่ละระดับ - กำหนดฟังก์ชัน
solve(node, level):- ถ้า
node == nullคืนค่า - ถ้า
level == ans.size()เพิ่มnode.valเข้าans - มิฉะนั้น
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;
}
};
อินพุทและเอาต์พุทตัวอย่าง
Input: [1,3,2,5,3,null,9]
Output: [3,5,9]