หาค่าด้านซ้ายสุดของแถวสุดท้าย (Find Bottom Left Tree Value)
ให้ต้นไม้แบนารี หาค่าของโหนดที่อยู่ด้านซ้ายสุดในระดับลึกที่สุด (deepest level)
ตัวอย่าง: ต้นไม้ [3,5,1,6,2,0,8,null,null,7,4] → ระดับสุดท้ายคือ [7,4] ค่าซ้ายสุดคือ 7
ขั้นตอนการแก้ปัญหา (DFS Pre-order)
- กำหนดตัวแปร
ansและmaxLevel = -1 - ฟังก์ชัน
solve(node, level):- ถ้า
node == nullคืนค่า - ถ้า
level > maxLevel:ans = node.val,maxLevel = level - เรียก
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:
int ans = 0, maxLevel = -1;
void solve(TreeNode* node, int level = 0) {
if (!node) return;
if (level > maxLevel) {
ans = node->val;
maxLevel = level;
}
solve(node->left, level + 1);
solve(node->right, level + 1);
}
int findBottomLeftValue(TreeNode* root) {
maxLevel = -1;
solve(root);
return ans;
}
};
อินพุทและเอาต์พุทตัวอย่าง
Input: [3,5,1,6,2,0,8,null,null,7,4]
Output: 7