Mô tả bài toán
Cho danh sách nums biểu diễn các nút lá theo thứ tự inorder của một cây nhị phân. Các nút nội bộ có 2 con và giá trị bằng tích của giá trị lá lớn nhất của cây con trái và cây con phải. Tìm tổng giá trị của cây có tổng nhỏ nhất.
Ví dụ: nums = [3, 5, 10] → đầu ra 83.
Giải thuật (Tham lam + Stack)
res = sum(nums).- Khi độ dài
nums> 1:- Tìm chỉ số
icủa phần tử nhỏ nhất. left = nums[i-1]nếui>0else vô cực.right = nums[i+1]nếui < len(nums)-1else vô cực.res += min(left, right) * nums.pop(i).
- Tìm chỉ số
- Trả về
res.
Ví dụ mã Python
class Solution:
def solve(self, nums):
res = sum(nums)
while len(nums) > 1:
i = nums.index(min(nums))
left = nums[i - 1] if i > 0 else float("inf")
right = nums[i + 1] if i < len(nums) - 1 else float("inf")
res += min(left, right) * nums.pop(i)
return res
ob = Solution()
nums = [3, 5, 10]
print(ob.solve(nums))
Đầu vào
[3, 5, 10]
Đầu ra
83