Câynhị phântìm kiếm:

Một phần của tài liệu Giáo trình cấu trúc dữ liệu và giải thuật (Trang 38 - 43)

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:

Một phần của tài liệu Giáo trình cấu trúc dữ liệu và giải thuật (Trang 38 - 43)

Tải bản đầy đủ (PDF)

(60 trang)