1. Trang chủ
  2. » Địa lí lớp 9

Bài giảng Cấu trúc dữ liệu và giải thuật: Cây nhị phân tìm kiếm - Phan Mạnh Hiển (2020)

10 11 0

Đ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 10
Dung lượng 644,13 KB

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

Nội dung

− Tất cả các giá trị trên cây con trái của X nhỏ hơn X − Tất cả các giá trị trên cây con phải của X lớn hơn X.. Đây có phải là cây nhị phân tìm kiếm?.[r]

Trang 1

Cây nhị phân tìm kiếm (Binary Search Trees)

Nguyễn Mạnh Hiển

hiennm@tlu.edu.vn

Trang 2

Định nghĩa

• Xét trường hợp các phần tử có giá trị khác nhau

• Cây nhị phân tìm kiếm là cây nhị phân, trong đó với mọi nút X:

− Tất cả các giá trị trên cây

con trái của X nhỏ hơn X

− Tất cả các giá trị trên cây

con phải của X lớn hơn X

Trang 3

Đây có phải là cây nhị phân tìm kiếm?

Trang 4

Các thao tác chính

• Tìm phần tử nhỏ nhất

• Tìm phần tử lớn nhất

• Tìm phần tử x

• Chèn phần tử x

• Xóa phần tử x

Tất cả các thao tác trên có thời gian chạy trung bình

là O(log N) sẽ chứng minh sau

Trang 5

Cài đặt

template <typename T> // T là kiểu phần tử class BinarySearchTree {

public:

hàm tạo, hàm hủy

kiểm tra rỗng

xóa rỗng cây

tìm min, tìm max, tìm phần tử x

chèn/xóa phần tử x

private:

struct BinaryNode { }; // kiểu của các nút BinaryNode * root; // con trỏ tới nút gốc các hàm trợ giúp

};

Trang 6

Kiểu của các nút

struct BinaryNode {

T elem;

BinaryNode * left;

BinaryNode * right;

BinaryNode(T x, BinaryNode * l, BinaryNode * r) { elem = x;

left = l;

right = r;

}

};

Trang 7

Hàm tạo, hàm hủy, xóa rỗng

BinarySearchTree() {

root = NULL;

}

~BinarySearchTree() {

makeEmpty();

}

void makeEmpty() { // hàm xóa rỗng cây

makeEmpty(root); // gọi hàm private trợ giúp }

bool isEmpty() { // hàm kiểm tra rỗng

return (root == NULL);

}

Trang 8

Xóa rỗng cây có gốc t

// Hàm private trợ giúp xóa rỗng cây

void makeEmpty(BinaryNode * & t) {

if (t == NULL)

return; // thoát ra nếu cây rỗng

makeEmpty(t->left); // xóa cây con trái

makeEmpty(t->right); // xóa cây con phải

delete t; // xóa nút gốc

t = NULL;

}

Trang 9

Tìm phần tử nhỏ nhất

// Hàm public

T findMin() {

BinaryNode * v = findMin(root); // gọi hàm private return v->elem;

}

// Hàm private trợ giúp (dùng đệ quy)

BinaryNode * findMin(BinaryNode * t) {

if (t == NULL) // cây rỗng?

return NULL;

if(t->left == NULL) // nút ngoài cùng bên trái? return t;

return findMin(t->left); // tìm trên cây con trái }

Trang 10

Tìm phần tử lớn nhất

// Hàm public

T findMax() {

BinaryNode * v = findMax(root); // gọi hàm private return v->elem;

}

// Hàm private trợ giúp (không dùng đệ quy)

BinaryNode * findMax(BinaryNode * t) {

if (t != NULL)

while (t->right != NULL) // chưa đến tận cùng?

t = t->right; // đi tiếp sang bên phải return t;

}

Ngày đăng: 11/03/2021, 07:27

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

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

w