Mỗi nút trong cây bất kỳ đều chƣ́a các trƣờng thông tin , trên mô ̣t cây tìm kiếm nhị phân mỗi nút là một struct (bản ghi – record) gồm các trƣờng: trƣờng dƣ̃ liê ̣u data, trƣờng khóa key để so sánh với các nút khác, các liên kết tới các nút con của nút left và right.
Để tâ ̣p trung vào các vấn đề thuâ ̣t toá n ta bỏ qua trƣờng dƣ̃ liê ̣u , chỉ xem nhƣ mỗi nút trên cây tìm kiếm nhi ̣ phân gồm có một trƣờng khóa key và hai trƣờng liên kết left và right.
Với các giả thiết trên ta đi ̣nh nghĩa cây tìm kiếm nhi ̣ phân nhƣ sau:
Cây tìm kiếm nhi ̣ phân là một cây nhi ̣ phân (binary tree ) mà mỗi nút x trong cây thỏa mãn bất đẳng thức kép sau:
( _ ( )) ( ) ( _ ( ))
key left child x key x key right child x
Trong đó left_child(x), right_child(x) là các nút con trái và phải của nút x , key() là hàm trả về giá trị khóa ở nút tƣơng ứng.
Ví dụ:
Hình 5.4. Cây tìm kiếm nhi ̣ phân BST, tham khảo tƣ̀ wikipedia. Nhận xét:
- Trên cây BST không có hai nút cùng khoá. - Cây con của một cây BST là cây BST.
Ƣu điểm chính của cây tìm kiếm nhi ̣ phân là : nó cung cấp thuâ ̣t toán sắp xếp và tìm kiếm dƣ̣a trên kiểu duyê ̣t thƣ́ tƣ̣ giƣ̃a (in-order) mô ̣t cách rất hiê ̣u quả, và là cấu trúc dữ liệu cơ bản cho các cấu trúc dữ liệu cao cấp hơn (trƣ̀u tƣợng hơn) nhƣ tâ ̣p hợp (set), các mảng liên kết
B C
A
C B
32 (associative array), các ánh xạ map, và các cây cân bằng tối ƣu nhƣ AVL , cây đỏ đen. Chúng ta sẽ xem xét ta ̣i sao cây tìm kiếm nhi ̣ phân la ̣i hiê ̣u quả nhƣ vâ ̣y.