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

Chương 4: Cây nhị phân potx

45 272 0
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

Tiêu đề Cây nhị phân
Tác giả Dương Thành Phết
Trường học Trường Cao Đẳng Tây Nam Á
Chuyên ngành Khoa CNTT
Thể loại Chương
Định dạng
Số trang 45
Dung lượng 11,94 MB

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

Nội dung

Khi ñó cây T với gốc r ñược hình thành bằng cách cho r trở thành nút cha của các nút r1, r2,…, rn Khoa CNTT Trường TC TÂY NAM Á © Dương Thành Phết-www.thayphet.net 4... Duyệt cây nhị phâ

Trang 1

Chương 4 CÂY NHỊ PHÂN

4.1 Cấu trúc cây

4.1.1 ðịnh nghĩa 4.1.2 Một số khái niệm cơ bản

4.2 Cây nhị phân

4.2.1 ðịnh nghĩa 4.2.2 Một số tính chất của cây nhị phân 4.2.3 Biểu diễn cây nhị phân

4.2.3 Duyệt cây nhị phân

4.3 Cây nhị phân tìm kiếm

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

Trang 2

4.1 Cấu Trúc Cây

4.1.1 ðịnh nghĩa cây 4.1.2 Một số khái niệm cơ bản

Khoa CNTT Trường TC TÂY NAM Á

© Dương Thành Phết-www.thayphet.net

Trang 3

4.1.1 ðịnh nghĩa cây

ðịnh nghĩa 1: Một cây là tập hợp hữu hạn các nút trong

ñó có một nút ñặc biệt gọi là gốc (root) Giữa các nút có một quan hệ phân cấp gọi là "quan hệ cha con".

Nút gốc

Trang 4

Nút gốc

r T1

T2

ðịnh nghĩa 2: Cây ñược ñịnh nghĩa ñệ qui như sau

1 Một nút là một cây và nút này cũng là gốc của cây.

2 Giả sử T1, T2, …,Tn (n 1) là các cây có gốc tương ứng r1, r2,…, rn Khi ñó cây T với gốc r ñược hình thành bằng cách cho r trở thành nút cha của các nút r1, r2,…, rn

Khoa CNTT Trường TC TÂY NAM Á

© Dương Thành Phết-www.thayphet.net

4

Trang 5

4.1.2 Một số khái niệm cơ bản

Bậc của một nút: Là số con của nút ñó

Bậc của một cây: Là bậc lớn nhất của các nút có trên

cây ñó (số cây con tối ña của một nút thuộc cây) Cây có

bậc n thì gọi là cây n - phân

Cây bậc 2 hay còn gọi là cây nhị phân

5

Trang 7

 Mức của một nút

Mức (gốc (T0)) =0

Gọi T1, T2, , Tn là các cây con của T0

Khi ñó Mức (T1) = Mức (T2) = = Mức (Tn) = Mức (T0) +1

 Chiều cao của cây: Là số mức lớn nhất có trên cây ñó

Cây có chiều cao là 3

7

Trang 8

 ðường ñi: Dãy các ñỉnh n1,n2, .,nk gọi là ñường ñinếu ni là cha của ni+1 (1 ≤ i ≤ k-1

 ðộ dài của ñường ñi: Là số nút trên ñường ñi -1

ðộ dài ñường ñi là 3

Khoa CNTT Trường TC TÂY NAM Á

© Dương Thành Phết-www.thayphet.net

8

Trang 9

 Cây ñược sắp – Cây có thứ tự: Trong một cây, nếucác cây con của mỗi ñỉnh ñược sắp theo một thứ nhấtñịnh, thì cây ñược gọi là cây ñược sắp (cây có thứ tự)

Trang 10

4.2 Cây Nhị Phân

4.2.1 ðịnh nghĩa4.2.2 Một số tính chất của cây nhị phân4.2.3 Biểu diễn cây nhị phân

4.2.4 Duyệt cây nhị phân

Khoa CNTT Trường TC TÂY NAM Á

© Dương Thành Phết-www.thayphet.net

10

Trang 11

Cây nhị phân là cây mà mỗi nút có tối ña hai cây con ðối với cây con của một nút có phân biệt cây con trái và cây con phải.

4.2.1 ðịnh Nghĩa

11

Trang 12

4.2.1 Một Số Tính Chất Của Cây Nhị Phân

 Số lượng tối ña các nút có ở mức i: 2 i (i 0)

 Số nút lá tối ña trên cây có chiều cao h la: 2 h

 Số lượng nút tối ña của cây có chiều cao h: 2 h+1 -1(h1 )

Khoa CNTT Trường TC TÂY NAM Á

© Dương Thành Phết-www.thayphet.net

12

Trang 13

4.2.3 Biễu Diễn Cây Nhị Phân

 Lưu trữ kế tiếp

Phương pháp tự nhiên nhất ñể biểu diễn cây nhị phân

là chỉ ra ñỉnh con trái và ñỉnh con phải của mỗi ñỉnh

Ta có thể sử dụng một mảng ñể lưu trữ các ñỉnh của cây nhị phân

Mỗi ñỉnh của cây ñược biểu gồm ba giá trị

 Infor: Mô tả thông tin gắn với mỗi ñỉnh

 Letf : Chỉ ñỉnh con trái

 Right: Chỉ ñỉnh con phải

Trang 14

Khoa CNTT Trường TC TÂY NAM Á

© Dương Thành Phết-www.thayphet.net

14

Trang 15

Nếu cây nhị phân ñầy ñủ Có thể lưu trữ cây nàybằng mãng 1 chiều

15

Trang 16

Nếu cây nhị phân không ñầy ñủ thì cách lưu trữ nàykhông thích hợp vì phí nhiều bộ nhớ.

Khoa CNTT Trường TC TÂY NAM Á

© Dương Thành Phết-www.thayphet.net

16

Trang 17

 Lưu trữ móc nối

Cách lưu trữ này khắc phục nhược ñiểm của cách lưutrữ kế tiếp ñồng thời phản ánh ñược dạng tự nhiên củacây Cách lưu trữ này một phần tử có qui tắc sau:

 Infor: Mô tả thông tin gắn với mỗi ñỉnh

 Letf : Con trỏ trỏ tới cây con trái

 Right: Con trỏ trỏ tới cây con phải

17

Trang 18

Khai báo cấu cây

typedef struct TNODE {

<Data> Key;//<Data> là kiêu dư liêu cho key struct NODE *pLeft, *pRight;

Ví vụ khai báo cây NP biểu diễn các nút là số nguyên

Khoa CNTT Trường TC TÂY NAM Á

© Dương Thành Phết-www.thayphet.net

18

Trang 19

 Duyệt cây nhị phân

Duyệt theo thứ tự trước (NLR)

Tại nút t ñang xét nếu khác rỗng

- Thăm gốc

- Duyệt câycon trái theo thứ trước

- Duyệt cây con phải theo thư tự trước

void NLR(TREE t) {

if (t != NULL) {

<xử lý nút gốc>;

NLR(t->pleft);

NLR(t->pright);

} }

19

Trang 20

Duyệt theo thứ tự giữa (LNR )

Tại nút t ñang xét nếu khác rỗng

- Duyệt cây con trái theo thứ giữa

- Thăm gốc

- Duyệt cây con phải theo thư tự giữa

void LNR(TREE t) {

if (t != NULL) {

NLR(t->pleft);

<xử lý nút gốc>;

NLR(t->pright);

} }

Khoa CNTT Trường TC TÂY NAM Á

© Dương Thành Phết-www.thayphet.net

20

Trang 21

Duyệt theo thứ tự sau (LRN)

Tại nút t ñang xét nếu khác rỗng

- Duyệt cây con trái theo thứ sau

- Duyệt cây con phải theo thư tự sau

- Thăm gốc

void LRN(TREE t) {

if (t != NULL) {

NLR(t->pleft);

NLR(t->pright);

<xử lý nút gốc>;

} }

21

Trang 22

4.3 Cây Nhị Phân Tìm Kiếm

4.3.1 Cây nhị phân tìm kiếm

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

Khoa CNTT Trường TC TÂY NAM Á

© Dương Thành Phết-www.thayphet.net

22

Trang 23

4.3.1 Cây Nhị Phân Tìm Kiếm

Cây nhị phân tìm kiếm (CNPTK) là cây nhị phân thoả mãnñồng thời các ñiều kiện:

 Khoá các ñỉnh thuộc cây con trái nhỏ hơn khoá nút gốc

 Khoá nút gốc nhỏ hơn (hoặc bằng) khoá các ñỉnh thuộccây con phải

 Cây con trái và cây con phải của gốc cũng là CNPTK

Cây NPTK ñược sử dụng vào nhiều mục ñích khác nhau Tuy nhiên việc

sử dụng cây NPTK ñể lưu giữ và tìm kiếm thông tin vẫn là một trong những ứng dụng quan trọng nhất

ðịnh Nghĩa

23

Trang 24

 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 nấht của cây

Trang 25

4.3.2 Các Thao Tác Trên Cây NPTK

 Khai báo cấu trúc cây

 Dựng cây – Thêm nút vào cây

Trang 26

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, Hủy

Các lưu ý khác

- Trước khi tạo nút phải xin cấp phát vùng nhớ

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

- Trước khi kết thúc chương trình phải hủy cây (Giải phóng vùng nhớ)

Khoa CNTT Trường TC TÂY NAM Á

© Dương Thành Phết-www.thayphet.net

26

Trang 27

Khai báo cấu cây

typedef struct TNODE

{

<Data> Key;//<Data> là kiêu dư liêu cho key

struct NODE *pLeft, *pRight;

Trang 28

 Dựng cây – Thêm nút vào cây

 Nếu nút cần thêm < nút ñang xét thì thêm về bên trái

 Ngược lại thì thêm về bên phải

Khoa CNTT Trường TC TÂY NAM Á

© Dương Thành Phết-www.thayphet.net

28

Trang 29

29

Trang 30

 Duyệt Cây

Duyệt theo thứ tự trước (NLR)

Tại nút t ñang xét nếu khác rỗng

- In giá trị nút t

- Duyệt câycon trái theo thứ trước

- Duyệt cây con phải theo thư tự trước

void NLR(TREE t) {

if (t != NULL) {

cout<<root->key<<“\t”;

NLR(t->pleft);

NLR(t->pright);

} }

Khoa CNTT Trường TC TÂY NAM Á

© Dương Thành Phết-www.thayphet.net

30

Trang 31

1 3 4 6 7 15 23 36 40

Duyệt theo thứ tự giữa (LNR )

Tại nút t ñang xét nếu khác rỗng

- Duyệt cây con trái theo thứ giữa

- In giá trị nút t

- Duyệt cây con phải theo thư tự giữa

void LNR(TREE t) {

if (t != NULL) {

NLR(t->pleft);

cout<<root->key<<“\t”;

NLR(t->pright);

} }

31

Trang 32

1 4 6 3 23 15 40 36 7

Duyệt theo thứ tự sau (LRN)

Tại nút t ñang xét nếu khác rỗng

- Duyệt cây con trái theo thứ sau

- Duyệt cây con phải theo thư tự sau

- In giá trị nút t

void LRN(TREE t) {

if (t != NULL) {

NLR(t->pleft);

NLR(t->pright);

cout<<root->key<<“\t”;

} }

Khoa CNTT Trường TC TÂY NAM Á

© Dương Thành Phết-www.thayphet.net

32

Trang 33

Chương trình chính gọi các thủ tục dựng và duyêt cây

33

Trang 34

 Dựng cây từ kết quả duyệt câ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 nút gốc

- Lần lượt ñưa các giá trị còn lại từ trái sang phải vào cây theo nguyên tắc dựng cây

Khoa CNTT Trường TC TÂY NAM Á

© Dương Thành Phết-www.thayphet.net

34

Trang 37

Tìm nút có giá trị nhỏ nhất

Tương tự cho nút có giá trị lớn nhất, Nút nhỏ nhất của cây con trái, nút lớn nhất của cây con phải

37

Trang 38

 Xóa nút trên cây

Trang 39

6

4 1

7

40 15

23

4 1

7

40 23

4 1

 Xóa nút có 1 cây con

39

Trang 40

40 15

23

6

4 1

Tìm nút thế mạng Cách 1: Tìm nút trái nhất của cây con phải Cách 2: Tìm nút phải nhất của cây con trái

 Xóa nút có 2 cây con.

Khoa CNTT Trường TC TÂY NAM Á

© Dương Thành Phết-www.thayphet.net

40

Trang 41

Cách 1: Tìm nút trái nhất của cây con phải

Xóa nút 3 (Dùng nút 4 trhay thế)

7

40 15

23

5 1

6

41

Trang 42

Cách 2: Tìm nút trái phải của cây con trái

Xóa nút 36 (Dùng nút 23 thay thế)

7

40 15

Trang 43

Thủ tục tìm nút thế mạng (phải nhất trên cây con trái)

43

Trang 44

Thủ tục xóa nút có giá X trên cây NPTK

Khoa CNTT Trường TC TÂY NAM Á

© Dương Thành Phết-www.thayphet.net

44

Trang 45

 Hủy toàn bộ cây

Việc hủy toàn bộ cây thực hiện thông qua thao tác

duyệt cây theo thứ tự sau

Nếu nút t khác rỗng

- Hủy cây con trái

- Hủy cây con phải

- Hủy nút t

void removeTree(TREE &t){

if(t){removeTree(t->pLeft);

removeTree(t->pRight);

delete(t);

}}

45

Ngày đăng: 26/07/2014, 03:22

TỪ KHÓA LIÊN QUAN

w