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 cau truc du lieu va giai thuat giaotrinh cuuduongthancong com (Trang 123 - 124)

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

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 cau truc du lieu va giai thuat giaotrinh cuuduongthancong com (Trang 123 - 124)

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

(153 trang)