python-077Đọc toàn bộ đề miễn phí

Đường kính và Đường đi có tổng lớn nhất trên cây nhị phân

Cho cây nhị phân với cấu trúc nút:

PythonNâng cao35 phút

Tiến độ của tôi ở bài này

Điểm được lưu vào tài khoản sau khi chấm bài.

Đang tải điểm của bạn…

Kiến thức và chủ đề

treestree dprecursiondfs

Kiến thức tiên quyết: binary trees, recursion.

Nội dung đề bài

Mục tiêu kiến thức

  • Áp dụng quy hoạch động trên cây (Tree DP) theo thứ tự hậu thứ tự (Post-order Traversal).
  • Tính đường kính cây nhị phân: độ dài (số lượng cạnh) của đường đi dài nhất giữa hai nút bất kỳ.
  • Tính tổng đường đi lớn nhất (Maximum Path Sum): đường đi liên tục qua các nút liền kề, mỗi nút đi qua tối đa 1 lần, hỗ trợ các nút có giá trị âm.

Mô tả bài toán

Cho cây nhị phân với cấu trúc nút:

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

Viết hàm binary_tree_path_metrics(root: TreeNode | None) -> tuple[int, int]:

  • Trả về (diameter, max_path_sum).
  • Nếu root là None, trả về (0, 0).
  • diameter: Số lượng cạnh trên đường đi dài nhất giữa hai nút bất kỳ trong cây (đường đi này có thể hoặc không đi qua gốc).
  • max_path_sum: Tổng lớn nhất của một đường đi bất kỳ (phải chứa ít nhất 1 nút). Nếu cây toàn giá trị âm, trả về giá trị nút lớn nhất (ít âm nhất).

Để kiểm thử thuận tiện, module cần cung cấp thêm hàm: build_tree(values: list) -> TreeNode | None xây dựng cây theo thứ tự tầng (Level-order).

Input

  • Tham số: root: TreeNode | None.

Output

  • Trả về: tuple[int, int].

Ràng buộc

  • Thời gian chạy tối đa: 1000ms.
  • Giới hạn bộ nhớ: 256MB.
  • Dữ liệu đầu vào tuân thủ đúng kiểu dữ liệu và miền giá trị được mô tả.

Ví dụ 1

Input

TreeNode([1, 2, 3, 4, 5])

Output

[3, 11]

Giải thích

Hàm được gọi với các tham số mẫu trên và trả về kết quả chính xác theo yêu cầu.

Ví dụ 2

Input

TreeNode([-10, 9, 20, None, None, 15, 7])

Output

[3, 42]

Giải thích

Hàm được gọi với bộ tham số thứ hai và trả về kết quả tương ứng theo thiết kế.

3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.