Tìm kiếm trên cây nhị phân tìm kiếm

Một phần của tài liệu Bài giảng Cấu trúc dữ liệu và giải thuật (2013): Phần 2 (Trang 30 - 31)

Việc tiến hành tìm kiếm trên cây nhị phân tìm kiếm cũng tương tự như phương pháp tìm kiếm nhị phân đã nói ở trên. Để tìm một nút có khoá là x, đầu tiên tiến hành so sánh nó với khoá của nút gốc. Nếu nhỏ hơn, tiến hành tìm kiếm ở cây con bên trái, nếu bằng nhau thì dừng quá trình tìm kiếm, và nếu lớn hơn thì tiến hành tìm kiếm ở cây con bên phải. Quá trình tìm kiếm trên cây con lại được lặp lại tương tự.

Tại mỗi bước, ta loại bỏđược một phần của cây mà chắc chắn là không chứa nút có khoá cần tìm. Phạm vi tìm kiếm luôn được thu hẹp lại và quá trình tìm kiếm kết thúc khi gặp được nút có khoá cần tìm hoặc không có nút nào như vậy (có nghĩa là cây con để tìm là cây rỗng).

struct node { int item;

struct node *left; struct node *right; }

typedef struct node *treenode;

treenode tree_search(int x, treenode root){ int found=0; treenode temp=root; while (temp!=NULL){ if (x < temp.item) temp=temp.left; elseif (x > temp.item)temp=temp.right; else break; } return temp; }

Xét cây nhị phân tìm kiếm nhưở hình 7.2. Giả sử ta cần tìm nút 32 trên cây này. Quá trình tìm kiếm như sau:

Bước 1: So sánh 32 với nút gốc là 49. Do 32 nhỏ hơn 49 nên tiến hành tìm kiếm ở cây con bên trái.

49

25 61

17 32 53 98

Bước 2: So sánh 32 với nút gốc của cây tìm kiếm hiện tại là 25. Do 32 lớn hơn 25 nên tiến hành tìm kiếm ở cây con bên phải.

Bước 3: So sánh 32 với nút gốc của cây tìm kiếm hiện tại cũng là 32. Do 2 giá trị bằng nhau nên quá trình tìm kiếm kết thúc thành công.

Như vậy, chỉ sau 3 phép so sánh, thao tác tìm kiếm trong 1 danh sách gồm 7 phần tử đã kết thúc và cho kết quả.

Một phần của tài liệu Bài giảng Cấu trúc dữ liệu và giải thuật (2013): Phần 2 (Trang 30 - 31)