1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Giáo trình hướng dẫn phân tích dùng thuật toán thêm một nút vào bên trái có thành phần dữ liệu newdata p3 doc

5 299 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 5
Dung lượng 170,64 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

nút không phải là nút lá thì chúng ta phải tìm cách chuyển các nút gốc cây con là các nút con của nút cần hủy thành các nút gốc cây con của các nút khác rồi mới tiến hành hủy nút này.. -

Trang 1

nút không phải là nút lá thì chúng ta phải tìm cách chuyển các nút gốc cây con là các nút con của nút cần hủy thành các nút gốc cây con của các nút khác rồi mới tiến hành hủy nút này

- Trường hợp nếu nút cần hủy chỉ có 01 nút gốc cây con thì chúng ta có thể chuyển nút gốc cây con này thành nút gốc cây con của nút cha của nút cần hủy

- Trường hợp nếu nút cần hủy có 2 nút gốc cây con thì chúng ta phải chuyển 02 nút gốc cây con này thành nút gốc cây con của các nút khác với nút cần hủy

Việc chọn các nút để làm nhiệm vụ nút cha của các nút gốc cây con này tùy vào từng trường hợp cụ thể của cây nhị phân mà chúng ta sẽ lựa chọn cho phù hợp

Do vậy, thao tác hủy một nút sẽ được trình bày cụ thể trong các loại cây cụ thể được trình bày ở các phần sau

5.2.3 Cây nhị phân tìm kiếm (Binary Searching Tree)

A Khái niệm – Cấu trúc dữ liệu:

Cây nhị phân tìm kiếm là cây nhị phân có thành phần khóa của mọi nút lớn hơn thành phần khóa của tất cả các nút trong cây con trái của nó và nhỏ hơn thành phần khóa của tất cả các nút trong cây con phải của nó

Ví dụ: Hình ảnh sau là hình ảnh của một cây nhị phân tìm kiếm

BSTree

60

Từ khái niệm này chúng ta có một số nhận xét:

- Cấu trúc dữ liệu của cây nhị phân tìm kiếm là cấu trúc dữ liệu để biểu diễn các cây nhị phân nói chung

typedef struct BST_Node { T Key;

BST_Node * BST_Left; // Vùng liên kết quản lý địa chỉ nút gốc cây con trái BST_Node * BST_Right; // Vùng liên kết quản lý địa chỉ nút gốc cây con phải } BST_OneNode;

Trang 2

typedef BST_OneNode * BST_Type;

Để quản lý các cây nhị phân tìm kiếm chúng ta cần quản lý địa chỉ nút gốc của cây:

BST_Type BSTree;

- Khóa nhận diện (Key) của các nút trong cây nhị phân tìm kiếm đôi một khác nhau (không có hiện tượng trùng khóa)

Tuy nhiên trong trường hợp cần quản lý các nút có khóa trùng nhau trong cây nhị phân tìm kiếm thì chúng ta có thể mở rộng cấu trúc dữ liệu của mỗi nút bằng cách thêm thành phần Count để ghi nhận số lượng các nút trùng khóa Khi đó, cấu trúc dữ liệu để quản lý các cây nhị phân tìm kiếm được mở rộng như sau:

typedef struct BSE_Node { T Key;

int Count;

BSE_Node * BSE_Left; // Vùng liên kết quản lý địa chỉ nút gốc cây con trái BSE_Node * BSE_Right; // Vùng liên kết quản lý địa chỉ nút gốc cây con phải } BSE_OneNode;

typedef BSE_OneNode * BSE_Type;

và chúng ta quản lý cây nhị phân tìm kiếm này bằng cách quản lý địa chỉ nút gốc:

BSE_Type BSETree;

- Nút ở bên trái nhất là nút có giá trị khóa nhận diện nhỏ nhất và nút ở bên phải nhất là nút có giá trị khóa nhận diện lớn nhất trong cây nhị phân tìm kiếm

- Trong một cây nhị phân tìm kiếm thứ tự duyệt cây Left – Root – Right là thứ tự duyệt theo sự tăng dần các giá trị của Key trong các nút và thứ tự duyệt cây Right – Root – Left là thứ tự duyệt theo sự giảm dần các giá trị của Key trong các nút

B Các thao tác trên cây nhị phân tìm kiếm:

a Tìm kiếm trên cây:

Giả sử chúng ta cần tìm trên cây nhị phân tìm kiếm xem có tồn tại nút có khóa Key là SearchData hay không

Để thực hiện thao tác này chúng ta sẽ vận dụng thuật toán tìm kiếm nhị phân: Do đặc điểm của cây nhị phân tìm kiếm thì tại một nút, nếu Key của nút này khác với SearchData thì SearchData chỉ có thể tìm thấy hoặc trên cây con trái của nút này nếu SearchData nhỏ hơn Key của nút này hoặc trên cây con phải của nút này nếu SearchData lớn hơn Key của nút này

- Thuật toán tìm kiếm 1 nút trên cây nhị phân tìm kiếm:

B1: CurNode = BSTree B2: IF (CurNode = NULL) or (CurNode->Key = SearchData) Thực hiện Bkt

B3: IF (CurNode->Key > SearchData) // Tìm kiếm trên cây con trái CurNode = CurNode->BST_Left

B4: ELSE // Tìm kiếm trên cây con phải CurNode = CurNode->BST_Right

Trang 3

Bkt: Kết thúc

- Minh họa thuật toán:

Giả sử chúng ta cần tìm kiếm nút có thành phần dữ liệu là 30 trên cây nhị phân tìm kiếm sau: SearchData = 30

CurNode BSTree

60

CurNode->Key > SearchData // Tìm kiếm trên cây con trái

⇒ CurNode = CurNode->BST_Left

BSTree

Trang 4

CurNode->Key < SearchData // Tìm kiếm trên cây con phải

⇒ CurNode = CurNode->BST_Right

BSTree

60

CurNode->Key > SearchData // Tìm kiếm trên cây con trái

⇒ CurNode = CurNode->BST_Left

BSTree

60

CurNode->Key = SearchData ⇒ Thuật toán kết thúc (Tìm thấy)

Trang 5

Bây giờ giả sử chúng ta cần tìm kiếm nút có thành phần dữ liệu là 35 trên cây nhị phân tìm kiếm trên: SearchData = 35

CurNode BSTree

60

CurNode->Key > SearchData // Tìm kiếm trên cây con trái

⇒ CurNode = CurNode->BST_Left

BSTree

Ngày đăng: 24/07/2014, 12:21

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm