#BST0000018. Kiểm tra cây tìm kiếm nhị phân (Validate Binary Search Tree)

Kiểm tra cây tìm kiếm nhị phân (Validate Binary Search Tree)

Kiểm tra cây tìm kiếm nhị phân (Validate Binary Search Tree)

Nguồn: LeetCode

Phiên bản: Phước Hưng OJ Extended

Đề bài

Cho một cây nhị phân có nn nút. Một cây được gọi là BST hợp lệ khi đồng thời thỏa các điều kiện sau tại mọi nút có khóa vv:

  • mọi khóa trong cây con trái đều nhỏ hơn vv;
  • mọi khóa trong cây con phải đều lớn hơn vv;
  • bản thân hai cây con cũng phải thỏa cùng định nghĩa.

Các bất đẳng thức là nghiêm ngặt, vì vậy hai nút có cùng khóa không thể cùng xuất hiện trong một BST hợp lệ.

Hãy xác định cây đã cho có phải BST hợp lệ hay không.

Input

Dòng đầu chứa hai số nguyên nn và rr, trong đó rr là chỉ số gốc.

Tiếp theo có nn dòng. Dòng thứ ii mô tả nút ii bằng ba giá trị key left right. left và right bằng 00 nếu không có nút con tương ứng; nếu khác 00 thì là chỉ số trong [1,n][1,n].

Dữ liệu được bảo đảm mô tả đúng một cây nhị phân liên thông, không có chu trình, có gốc rr.

Output

In YES nếu cây là BST hợp lệ; ngược lại in NO.

Subtask

Subtask 1 (20 điểm): 1≤n≤201\le n\le 20.

Subtask 2 (30 điểm): 1≤n≤5001\le n\le 500.

Subtask 3 (50 điểm): 1≤n≤1041\le n\le 10^4.

Trong tất cả các subtask, −231≤key≤231−1-2^{31}\le \text{key}\le 2^{31}-1.

Ví dụ

Input

5 1
8 2 3
3 4 5
10 0 0
1 0 0
9 0 0

Output

NO

Giải thích

Nút có khóa 99 nằm trong cây con trái của nút gốc có khóa 88. Điều kiện của BST yêu cầu mọi khóa trong toàn bộ cây con trái phải nhỏ hơn 88, nhưng 9>89>8.

Do đó cây không hợp lệ và output là NO.