1. Trang chủ
  2. » Công Nghệ Thông Tin

Thuật toán cây nhị phân ppt

18 608 4
Tài liệu đã được kiểm tra trùng lặp

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

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

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

Nội dung

Các loại cây nhị phân a/ Cây nhị phân đúng Strictly Binary Tree: Tất cả các nút đều có đúng hai con ngoại trừ nút lá... CÁC KHÁI NIỆMb/ Cây nhị phân đầy Complete Binary Tree: là cây nh

Trang 1

CÂY NHỊ PHÂN

TMT

1

Trang 2

CÁC KHÁI NIỆM

1 Cấu trúc cây nhị phân

2 Các loại cây nhị phân

a/ Cây nhị phân đúng (Strictly Binary

Tree): Tất cả các nút đều có đúng hai con (ngoại trừ nút lá)

2

B

A

C

B

A

C

Trang 3

CÁC KHÁI NIỆM

b/ Cây nhị phân đầy (Complete Binary Tree): là cây nhị phân đúng và tất cả các nút lá ở cùng mức

3

B

A

C

B

A

C

Trang 4

ĐẶC ĐIỂM CÂY NHỊ PHÂN TÌM KIẾM

 Là cây nhị phân

 Giá trị của một node bất kỳ luôn lớn hơn giá trị của tất cả các node bên trái và nhỏ hơn giá trị tất cả các node bên phải

Nút có giá trị nhỏ nhất nằm ở trái nhất của cây

Nút có giá trị lớn nhất nằm ở phải nhất của cây

7 7

23 4

4

Trang 5

Cây nhị phân cân bằng (AVL): Một cây

nhị phân được gọi là cây nhị phân cân bằng nếu và chỉ nếu đối với mọi nút của cây thì chiều cao của cây con bên trái

và chiều cao của cây con bên phải hơn kém nhau nhiều nhất là 1 (Theo Adelson - Velski và Landis)

5

B

A

C

D

B

A

C

D

Trang 6

Cây nhị phân cân bằng hoàn toàn:

Một cây nhị phân được gọi là cây nhị phân cân bằng hoàn toàn nếu và chỉ nếu đối với mọi nút của cây thì số nút của cây con bên trái và số nút của cây con bên phải hơn kém nhau nhiều nhất là 1

6

B

A

C

I

H

H

B

A

C

I

H

H

Trang 7

ĐỊNH NGHĨA KIỂU DỮ LIỆU

typedef struct Node {

<Data> Key;

struct Node *Left, *Right;

} *Tree;

Giá trị

Trỏ trái Trỏ phải

pLeft pRight

Trang 8

KHAI BÁO CÂY NHỊ

typedef struct Node

{

int Key;

struct Node *Left, *Right;

} *Tree;

8

Trang 9

XÂY DỰNG CÂY

Ví dụ: có dãy số 20, 70, 30, 25, 35, 50, 80, 40,

60, 10

(3 trường hợp gốc là 50, gốc là, 10 hay gốc là 80)

9

Trang 10

Ví dụ: có dãy số 20, 70, 30, 25, 35, 50, 80, 40, 60, 10

10

Trang 11

Ví dụ: có dãy số 20, 70, 30, 25, 35, 50, 80, 40, 60, 10

11

Trang 12

DUYỆT CÂY

Thứ tự trước (NLR)

Thứ tự giữa (LNR)

Thứ tự sau (LRN)

……

12

Trang 13

7 3 L3 R3 36 L36 R36

7 3 1 6 L6 36 15 R15 40

7 3 1 6 4 36 15 23 40

7 7

23 4

13

Trang 14

Tại node t đang xét,

nếu khác rỗng thì

In giá trị của t

Duyệt cây con bên

trái của t theo thứ tự

NLR

Duyệt cây con bên

phải của t theo thứ tự

NLR

void NLR (TREE t) {

if(t!=NULL) {

cout<<t->Key<<“\t”; NLR(t->pLeft);

NLR(t->pRight);

} }

14

Trang 15

L7 7 R7

L3 3 R3 7 L36 36 R36

1 3 L6 6 7 15 R15 36 40

1 3 4 6 7 15 23 36 40

7 7

23 4

15

Trang 16

Tại node t đang xét, nếu

khác rỗng thì

Duyệt cây con bên trái

của t theo thứ tự LNR

In giá trị của t

Duyệt cây con bên

phải của t theo thứ tự

LNR

void LNR (TREE t) {

if(t!=NULL) {

LNR(t->pLeft);

cout<<t->Key<<“ “; LNR(t->pRight);

} }

16

Trang 17

L7 R7 7

L3 R3 3 L36 R36 36 7

1 L6 6 3 R15 15 40 36 7

1 4 6 3 23 15 40 36 7

7 7

23 4

17

Trang 18

Tại node t đang xét, nếu

khác rỗng thì

Duyệt cây con bên trái

của t theo thứ tự LRN

Duyệt cây con bên phải

của t theo thứ tự LRN

In giá trị của t

void LRN (TREE t) {

if(t!=NULL) {

LRN(t->pLeft);

LRN(t->pRight);

cout<<t->Key<<“ “;

} }

18

Ngày đăng: 09/07/2014, 12:20

TỪ KHÓA LIÊN QUAN

w