4.1.Định nghĩa
Cây nhị phân tìm kiếm là cây nhị phân mà ứng với mỗi nút:
• Giá trị của nút lớn hơn giá trị của các nút trong cây con
bên tráị
• Giá trị của nút nhỏ hơn giá trị của các nút trong cây con bên phảị
Để đơn giản, ta sử dụng một cấu trúc nút trong đĩ info cĩ kiểu nguyên
struct Node {
int Info; // dùng int thay vì struct Data Node *pLeft;
Node *pRight; };
typedef Node* Tree; Tree Root;
4.2. Tìm kiếm trên cây nhị phân tìm kiếm
Cách thức tìm kiếm giá trị X trên cây nhị phân tìm kiếm định nghĩa đệ quy như sau:
• Thăm nút gốc của cây
Nếu giá trị nút gốc là X tìm thấy nút
Nếu giá trị nút gốc lớn hơn X tìm đệ quy trong cây
con bên trái
Nếu giá trị nút gốc nhỏ hơn X tìm đệ quy trong cây con bên phải
a,Cài đặt thuật tốn khơng đệ quy:
Node* TimCayNPTK(Tree t, int x) { Node *p = t; while (p!=NULL) { if (x == p->info) return p; else if (x < p->info) p = p->pLeft; else p = p->pRight; } return NULL; } void main() { // Nhap x TimCayNPTK(Root, x); }
b,Cài đặt thuật tốn theo đệ quy:
Node* TimCayNPTK2(Tree t, int x) {
if (t==NULL) return NULL; else
{ if (x == t->info) if (x == t->info) return t; else if (x < t->info) return TimCayNPTK2(t->pLeft, x); else return TimCayNPTK2(t->pRight, x); } } void main() { // Nhap x TimCayNPTK2(Root, x); }
4.3.Thêm phần tử mới vào cây nhị phân tìm kiếm
Yêu cầu:Phần tử mới thêm vào phải bảo đảm tính chất của cây nhị phân tìm kiếm. Ví dụ: thêm số nút vào cây
Cách thực hiện: thêm giá trị X vào cây
• Giả sử X đã tồn tại trong cây, như vậy X phải cĩ một nút cha p, tìm nút cha nàỵ
• Tạo một nút t cĩ giá trị là X và cho con trỏ bên trái hay bên phải của nút cha p trỏ tới nút t này
int ChenNut(Tree *&t, int x) { if (t!=NULL) { if (t->info = x) return 0; // đã cĩ if (t->info < x) return ChenNut(t->pLeft, x); else return ChenNut(t->pRight, x); } t= new Node; t->info= x;
t->pLeft= t->pRight= NULL; return 1; } void main() { ChenNut(Root, 4); }
4.4.Xĩa phần tử khỏi cây nhị phân tìm kiếm
Yêu cầu:Khi xĩa một phần tử các phần tử cịn lại cũng phải bảo đảm tính chất của cây nhị phân tìm kiếm.
Cĩ 3 trường hợp của nút cần xĩa X: