1. Trang chủ
  2. » Nghệ sĩ và thiết kế

CÂY NHỊ PHÂN TÌM KIẾM

66 71 0

Đ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 66
Dung lượng 1,14 MB

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

Nội dung

Xây dựng cây từ kết quả duyệt theo thứ tự trước (NLR).  Chọn giá trị đầu tiên làm node gốc[r]

Trang 1

CÂY NHỊ PHÂN TÌM KIẾM

TMT

1

Trang 2

5. Định nghĩa kiểu dữ liệu

6. Các lưu ý khi cài đặt

7. Các thao tác

2

Trang 3

CÁC KHÁI NIỆM

 Bậc của một nút: là số cây concủa nút đó

 Nút gốc: là nút không có nútcha

 Nút lá: là nút có bậc bằng 0

 Nút nhánh: là nút có bậckhác 0 và không phải là gốc

2

2 2

1 1

Trang 4

 Độ cao của cây: Độ dàiđường đi từ gốc đến nút

lá ở mức thấp nhất

4

Trang 5

ĐẶ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ácnode 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

23 4

5

Trang 6

typedef struct TNODE {

Trang 7

V Í DỤ KHAI BÁO CÂY NHỊ PHÂN BIỂU

DIỄN CÁC NODE LÀ SỐ NGUYÊN

typedef struct TNODE

Trang 8

CÁC LƯU Ý KHI CÀI ĐẶT

Bước 1: Khai báo kiễu dữ liệu biểu diễn cây

Bước 2: Xây dựng hàm đưa dữ liệu (nhập) vào cây

Bước 3: Xây dựng các thao tác duyệt, tìm kiếm, huỷ, …

Các lưu ý khác:

1 Trước khi tạo node mới phải xin cấp phát vùng nhớ.

2 Trước khi tạo cây mới phải khởi tạo cây rỗng.

3 Trước khi kết thúc chương trình phải huỷ cây (giải phóng vùng nhớ)

8

Trang 9

CẤU TRÚC CHƯƠNG TRÌNH

Khai báo cấu trúc cây Khởi tạo cây rỗng Xây dựng cây Các thao tác

Hủy cây

9

Trang 13

if(x<t->Key) ThemNut(t->pLeft, x);

else ThemNut(t->pRight, x);

}}

Trang 17

17

Trang 18

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

NLR(t->pRight);

}}

18

Trang 19

Tiền Giang Bình Dương Hải Dương

19

Trang 20

20

Trang 21

LNR(t->pLeft);

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

}}

21

Trang 22

22

Trang 23

LRN(t->pLeft);

LRN(t->pRight);

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

}}

23

Trang 25

VẤN ĐỀ CẦN QUAN TÂM

Xây dựng cây từ kết quả duyệt theo thứ tự trước (NLR)

sang phải vào cây theo nguyên tắc xây dựng cây.

Xây dựng cây từ kết quả duyệt theo thứ tự sau (LRN)

sang trái vào cây theo nguyên tắc xây

Trang 26

VẤN ĐỀ CẦN QUAN TÂM (TT)

Xây dựng cây từ kết quả duyệt theo thứ tự giữa (LNR)

Gọi r: Số lượng giá trị cho trước.

 Gọi m = r div 2: Giá trị ở giữa.

 Chọn giá trị thứ m làm node gốc.

 Lần lượt đưa các giá trị bắt đầu từ vị trí m-1 lùi về trái vào cây theo nguyên tắc xây dựng cây.

 Lần lượt đưa các giá trị bắt đầu từ vị trí m+1 đến cuối vào cây theo nguyên tắc xây dựng cây.26

Trang 27

BÀI TẬP

Bài 6

Hãy vẽ cây nhị phân tìm kiếm T biết rằng khi duyệt cây T theo thứ tự Left- Right-Node thì được dãy sau: 1, 4, 7, 5,

Trang 28

BÀI TẬP

Bài 7

Hãy vẽ cây nhị phân tìm kiếm T biết rằng khi duyệt cây T theo thứ tự Node- Left-Right thì được dãy sau: 9, 4, 1, 3, 8,

Trang 33

CHO BIẾT CÁC THÔNG TIN CỦA CÂY

1. Số node lá (node bậc 0)

2. Số node có 1 cây con (node bậc 1)

3. Số node chỉ có 1 cây con phải

4. Số node có 1 cây con trái

5. Số node 2 cây con (node bậc 2)

6. Độ cao của cây

7. Số node của cây

8. Các node trên từng mức của cây

9. Độ dài đường đi từ gốc đến node x 33

Trang 34

SỐ NODE LÁ

Nếu node t khác rỗng thì

Nếu node t có bậc 0 thì

Trả về 1 Ngược lại

Trả về Số node lá cây trái t + Số node lá cây phải t

Nếu node t rỗng thì

Trả về 0

34

Trang 35

return 0;

}

35

Trang 36

SỐ NODE CÓ 1 CÂY CON

Nếu node t khác rỗng thì

d=Số node bậc 1 của cây trái t + Số node bậc 1 của cây phải t Nếu node t có bậc 1 thì trả về d+1 Ngược lại trả về d

Nếu node t rỗng thì

Trả về 0

36

Trang 37

SỐ NODE CÓ 1 CÂY CON

||(t->pLeft==NULL&&t->pRight!=NULL)) return d+1;

Trang 38

SỐ NODE CHỈ CÓ 1 CÂY CON PHẢI

Nếu node t khác rỗng thì

d = Số node chỉ có 1 cây con phải của cây con trái t

+ Số node chỉ có 1 cây con phải của cây con phải t Nếu node t chỉ có 1 cây con phải thì trả về d+1

Ngược lại trả về d

Nếu node t rỗng thì

Trả về 0

38

Trang 39

SỐ NODE CÓ 1 CÂY CON PHẢI

Trang 40

SỐ NODE CHỈ CÓ 1 CÂY CON TRÁI

40

Trang 41

SỐ NODE CÓ 2 CÂY CON

41

Trang 42

ĐỘ CAO CỦA CÂY

int DoCaoCay(TREE t){

if(t){

int t1=DoCaoCay(t->pLeft);

int t2=DoCaoCay(t->pRight);

return Max(t1, t2)+1;

}else

return 0;

Trang 43

SỐ NODE CỦA CÂY

43

Trang 44

44

Trang 45

CÁC NODE TRÊN TỪNG MỨC

void InMuck(TREE t, int k, int m=0)

{

if(t) {

if(m==k) {

printf("%d\t", t->Key);

return;

} else {

m++;

InMuck(t->pLeft, k,m);

InMuck(t->pRight, k, m);

} }

}

45

Trang 46

IN CÁC NODE CỦA TẤT CẢ MỨC

46

Trang 47

Đ Ộ DÀI ĐƯỜNG ĐI TỪ GỐC ĐẾN NODE

X

47

Trang 51

51

Trang 53

TÌM MIN

TNODE* Min(TREE t){

while(t->pLeft!=NULL){

t=t->pLeft;

}return t;

}

53

Trang 54

MIN CÂY CON BÊN PHẢI

54

Trang 55

TÌM MAX

55

Trang 56

TÌM MAX CÂY CON BÊN TRÁI

56

Trang 59

XÓA NODE TRÊN CÂY

1. Node lá

2. Node có 1 cây con

3. Node có 2 cây con

7

23 4

59

Trang 60

XÓA NODE LÁ

Xóa 1Xóa 23

7

23 4

60

Trang 61

XÓA NODE 1 CÂY CON

Xóa 6Xóa 15

7

23 4

61

Trang 62

XÓA NODE 2 CÂY CON

Tìm node thế mạng Cách 1: Tìm node trái

nhất của cây con phải Cách 2: Tìm node phải

nhất của cây con trái

16

23

62

Trang 64

XÓA MỘT NODE CÓ GIÁ TRỊ X

void HuyNut (TREE & t, int x)

} }

}

Trang 65

H UỶ TOÀN BỘ CÂY

Nếu node khác rỗng

 Hủy cây bên trái t

 Hủy cây bên phải t

 Hủy node t

65

Trang 66

Cho dãy số theo thứ tự nhập từ trái sang

phải như sau: 20 15 35 30

11 13 17 36 47 16 38 28 14

Hãy vẽ cây nhị phân tìm kiếm cho dãy

số trên.

Hãy cho biết kết quả duyệt cây trên

theo thứ tự trước, giữa và sau.

Cho biết độ cao của cây, các nút lá, các nút có bậc 2.

Vẽ lại cây sau khi thêm nút: 25 và 91

Trình bày từng bước và vẽ lại cây sau

khi lần lượt xoá các nút: 11 và 35

66

Ngày đăng: 16/12/2020, 13:15

TỪ KHÓA LIÊN QUAN

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