?Hãy sử dụng thủ tục Create2 để tạo một cây nhị phân

Một phần của tài liệu Bài giảng môn Cấu Trúc Dữ Liệu và Thuật toán doc (Trang 69 - 71)

3.3 Cây tìm kiếm nhị phân (binary search tree)

Ta thấy rằng, nhu cầu tìm kiếm là quan trọng, trong hầu hết các hệ thống lưu trữ, quản lý dữ liệu, thao tác tìm kiếm là thao tác thường được dùng nhất để khai thác thông tin, đối với cây tổng quát và cây đa phân, việc tìm kiếm bị hạn chế, để tìm kiếm ta chỉ có thể áp dụng phương pháp tìm kiếm tuần tự, vì vậy người ta đưa ra một cấu trúc cây thỏa mãn nhu cầu tìm kiếm trên bằng cách tạo thêm một số ràng buộc trên cây nhị phân – được gọi là: Cây tìm kiếm nhị phân (TKNP), ta có thể áp dụng phương pháp tìm kiếm nhị phân để tìm thông tin lưu trên cây này.

Cây tìm kiếm nhị phân là một cây nhị phân thoả mãn các điều kiện sau:

Điều kiện 1:

Tất cả các khoá tại các đỉnh của cây con bên trái đều có giá trị đi trước (< ) các khoá tại đỉnh gốc

Điều kiện 1:

Khoá tại gốc đi trước (<) tất cả các khoá ở các đỉnh của cây con bên phải

Điều kiện 3:

Cây con bên trái và cây con bên phải cũng là cây tìm kiếm nhị phân * Ví dụ

Lưu ý:

Dữ liệu lưu trữ tại mỗi nút có thể rất phức tạp,ví dụ là một record chẳng hạn, Khi đó, khoá của nút được tính dựa trên một trường nào đó, ta gọi là trường khoá. Trường khoá phải chứa các giá trị có thể so sánh được, tức là nó phải lấy giá trị từ một tập hợp có thứ tự.

Nhận xét:

- Trên cây TKNP không có hai nút cùng khoá. - Cây con của một cây TKNP là cây TKNP.

- Khi duyệt trung tự (InOrder) cây TKNP ta được một dãy có thứ tự tăng.

3.3.2 Cài đặt cây tìm kiếm nhị phân

10

6 15

4 8 12 23

1 5 7 9 11 14 20

Cây TKNP, trước hết, là một cây nhị phân. Do đó ta có thể áp dụng các cách cài đặt như đã trình bày trong phần cây nhị phân để cài đặt cây nhị phân tìm kiếm, điều lưu ý ở đây là mỗi đỉnh trên cây phải có một thành phần khóa, xác định duy nhất cho đỉnh đó.

Một cách cài đặt cây TKNP thường gặp là cài đặt bằng con trỏ. Mỗi nút của cây như là một mẩu tin (record) có tối thiểu ba trường: một trường chứa khoá, hai trường kia là hai con trỏ trỏ đến hai nút con (nếu nút con vắng mặt ta gán con trỏ bằng NIL)

*Dạng cài đặt sử dụng con trỏ:

Type BSTree = ^ Node; Node = Record

key : KeyType; {lưu khóa của đỉnh } [các trường lưu thông tin khác nếu có]

Left, Right: BSTree; {trỏ tới gốc cây con trái, gốc cây con phải}

End;

Var Root: BSTree; {trỏ tới gốc cây}

* Cài đặt sử dụng mảng – xem như bài tập dành cho bạn đọc

Nhận xét

Cây NPTK có sự khác biệt so với cây nhị phân về các phép toán. Với cây nhị phân tìm kiếm ta có các phép toán như: tìm kiếm, thêm hoặc xoá một nút trên cây TKNP để cây sau khi xoa phải luôn đảm bảo tính chất cuả cây TKNP.

3.3.3 Các phép toán cơ bản trên cây tìm kiếm nhị phân1- Khởi tạo cây TKNP rỗng 1- Khởi tạo cây TKNP rỗng (adsbygoogle = window.adsbygoogle || []).push({});

Ta cho con trỏ quản lý nút gốc (Root) của cây bằng NIL.

Procedure MakeNullTree(Var Root: BSTree) Begin

Root :=NiL; End;

Một phần của tài liệu Bài giảng môn Cấu Trúc Dữ Liệu và Thuật toán doc (Trang 69 - 71)