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

Chương 5: CÂY (TREE) pot

72 802 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 đề Chương 5: Cây (Tree) pot
Trường học Trường Đại Học Công Nghiệp Hà Nội
Chuyên ngành Cấu trúc dữ liệu
Thể loại Chương
Thành phố Hà Nội
Định dạng
Số trang 72
Dung lượng 616,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

Duyệt qua các nút trên cây nhị phân Duyệt nút gốc, duyệt cây con bên trái, duyệt cây con... Duyệt qua các nút trên cây nhị phân Duyệt cây con bên trái, duyệt nút gốc, duyệt cây con... Kh

Trang 1

Môn: CẤU TRÚC DỮ LIỆU

Chương 5: CÂY (TREE)

Trang 2

NỘI DUNG CHƯƠNG 5

1. Khái niệm cây – Biểu diễn cây

2. Cây nhị phân (Binary Tree)

1. Định nghĩa

2. Biểu diễn và các thao tác

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

3. Cây cân bằng (Balanced Tree)

1. Định nghĩa – Cấu trúc dữ liệu

2. Các thao tác trên cây cân bằng

BÀI TẬP

Trang 3

1.Khái niệm cây – Biểu diễn cây

1.1 Định nghĩa cây

1.2 Một số khái niệm liên quan

1.2.a Bậc của 1 cây

1.2.g Chiều cao (chiều sâu) của 1 cây

1.2.h Nút trước, nút sau của 1 nút

1.2.i Nút cha, nút con của 1 nút

1.2.j Chiều dài đường đi của 1 nút

Trang 4

1.Khái niệm cây – Biểu diễn cây (tt)

1.1 Định nghĩa cây

đặc điểm

Hoặc là tập hợp khác rỗng trong đó có 1 nút duy nhất làm

nút gốc (Root’s Node), các nút còn lại được phân thành

các nhóm trong đó mỗi nhóm là 1 cây con (Sub-Tree)

có 1 nút là gốc cây con

Trang 5

1.Khái niệm cây – Biểu diễn cây (tt)

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

 Nút gốc (root’s tree) là nút không phải là nút gốc cây con của

bất kỳ 1 cây con nào khác trong cây (nút không làm gốc cây

con)

1.2.d Nút lá

Trang 6

1.Khái niệm cây – Biểu diễn cây (tt)

1.2 Một số khái niệm liên quan (tt)

1.2.e Nút trung gian

 Nút trung gian hay còn gọi nút giữa (interior’s node) là nút không

phải là nút gốc và cũng không phải nút kết thúc (nút có bậc khác không và là nút gốc của cây con nào đó trong cây)

1.2.f Mức của 1 nút

 Mức của 1 nút (node’s level) bằng mức của nút gốc cây con

chứa nó +1.

 Mức của nút gốc = 1

1.2.g Chiều cao (chiều sâu) của 1 cây

 Chiều cao (chiều sâu) của 1 cây (tree’s height | tree’s depth) là

mức cao nhất của 1 nút trong cây

1.2.h Nút trước, nút sau của 1 nút

 Nút T được gọi là nút trước của 1 nút (ancestor’s node) của nút

S nếu cây con có gốc là T chứa cây con có gốc là S Khi đó S được gọi là nút sau của nút T (descendant’s node)

Trang 7

1.Khái niệm cây – Biểu diễn cây (tt)

1.2 Một số khái niệm liên quan (tt)

1.2.i Nút cha, nút con của 1 nút

 Nút B được gọi là nút cha (parent’s node) của nút C nếu nút B

là nút trước của nút B và mức của nút C lớn hơn mức của B

là 1 mức Khi đó nút C được gọi là nút con (child’s node) của B

1.2.j Chiều dài đường đi của 1 nút

 Chiều dài đường đi của 1 nút là số đỉnh (số nút) tính từ nút

gốc để đi đến nút đó

 Chiều dài đường đi của nút gốc luôn = 1, chiều dài đường đi

tới 1 nút bằng chiều dài đường đi tới nút cha của nó + 1

Trang 8

1.Khái niệm cây – Biểu diễn cây (tt)

1.2 Một số khái niệm liên quan (tt)

1.2.k Chiều dài đường đi của 1 cây

 Chiều dài đường đi của 1 cây (path’s length of the tree) là

tổng tất cả các chiều dài đường đi của tất cả các nút trên cây (chiều dài đường đi trong internal path’s length)

 Tính chiều dài đường đi ngoài (external path’s length) bằng

cách mở rộng tất cả các nút của cây sao cho các nút của cây

có cùng bậc (thêm vào các nút giả) với bậc của cây Chiều dài đường đi ngoài bằng tổng chiều

1.2.l Rừng.

Trang 9

1.Khái niệm cây – Biểu diễn cây (tt)

1.3 Biểu diễn cây

 Dùng đồ thị, Dùng giản đồ tập hợp, Sử dụng dạng phân cấp chỉ

số

BIỂU DIỄN CÂY TRONG BỘ NHỚ MÁY TÍNH

 Để biểu diễn cây trong bộ nhớ máy tính dùng danh sách liên kết.

 Để biểu diễn cây N-phân dùng danh sách có N mối liên kết để

quản lý N địa chỉ nút con.

 Cấu trúc dữ liệu của cây N-phân tương tự cấu trúc dữ liệu đa

Trang 10

2 Cây nhị phân (Binary Tree)

2.1 Định nghĩa

 Cây nhị phân là cây có bậc bằng 2 (bậc của nút tối đa bằng

2)

Trang 11

2 Cây nhị phân (Binary Tree)

2.2 Biểu diễn và các thao tác

sách có 2 mối liên kết để quản lý địa chỉ 2 nút con (cây con trái và cây con phải)

 Như vậy cấu trúc dữ liệu của cây nhị phân tương tự cấu trúc

dữ liệu của danh sách liên kết đôi nhưng cách thức liên kết khác:

Trang 12

2 Cây nhị phân (Binary Tree)

2.2 Biểu diễn và các thao tác (tt)

Các thao tác trên cây nhị phân bao gồm:

a Khởi tạo cây nhị phân

b Tạo mới 1 nút

c Thêm 1 nút vào cây nhị phân

d Duyệt qua các nút trên cây nhị phân

e Tính chiều cao của cây

f Tính số nút của cây

g Hủy 1 nút trên cây nhị phân

Trang 13

2 Cây nhị phân (Binary Tree)

2.2 a Khởi tạo cây nhị phân (Tham khảo)

Khởi tạo cây nhịn phân: cho con trỏ quản lý địa chỉ nút gốc về con

Trang 14

2 Cây nhị phân (Binary Tree)

2.2 b Tạo mới 1 nút (Tham khảo)

Thuật toán

B1: TNode = new BinTOneNode

B2: IF (BTNode == NULL)

Thực hiện BKT

B3: BTNode ->BinTLeft = NULL

B4: BTNode ->BinTRight = NULL

B5: BTNode -> Key = NewData

BKT: Kết thúc

Key

NULL NULL

BTNode

Trang 15

2 Cây nhị phân (Binary Tree)

2.2 b Tạo mới 1 nút (tt) (Tham khảo)

Cài đặt thuật toán trong C++

{

BinTType BTnode = new BinTOneNode;

if (BTnode != NULL)

{

BTnode-> BinTLeft = NULL;

BTnode-> BinTRight = NULL;

BTnode-> Key = NewData;

}

return (BTnode);

Trang 16

2 Cây nhị phân (Binary Tree)

2.2 c Thêm 1 nút vào cây nhị phân (Thêm trái nhất) – Thuật toán(Tham khảo)

Trang 17

2 Cây nhị phân (Binary Tree)

2.2 c Thêm 1 nút vào cây nhị phân (Thêm trái nhất) (Tham khảo)

Cài đặt thuật toán bằng C++

BinTType BinTreeAddLeft (BinTType &BTTree, T NewData)

BinTType Lnode = BTTree;

while (Lnode->BinTLeft != NULL)

Trang 18

2 Cây nhị phân (Binary Tree)

2.2 c Thêm 1 nút vào cây nhị phân (Thêm phải nhất)-Thuật toán(Tham

Trang 19

2 Cây nhị phân (Binary Tree)

2.2 c Thêm 1 nút vào cây nhị phân (Thêm phải nhất)

Cài đặt thuật toán bằng C++ (Tham khảo)

BinTType BinTreeAddRight (BinTType &BTTree, T NewData)

BinTType Rnode = BTTree;

while (Rnode->BinTRight != NULL)

Rnode = Rnode->BinTRight;

Rnode->BinTRight = NewNode;

}

return (NewNode);

Trang 20

2 Cây nhị phân (Binary Tree)

2.2 d Duyệt qua các nút trên cây nhị phân(Tham khảo)

 Duyệt theo thứ tự nút gốc trước (Preoder): nút gốc được duyệt

trước, sau đó mới duyệt đến 2 nút con Có 2 cách:

 Duyệt nút gốc, duyệt cây con bên trái, duyệt cây con bên phải

( Root - Left - Right )

 Duyệt nút gốc, duyệt cây con bên phải, duyệt cây con bên trái

( Root - Right - Left )

 Duyệt theo thứ tự nút gốc giữa ( Inoder ): duyệt 1 trong 2 cây con

trước rồi duyệt nút gốc sau đó mới duyệt cây con còn lại Có 2

cách:

 Duyệt cây con bên trái, duyệt nút gốc, duyệt cây con bên phải

( Left - Root - Right )

 Duyệt cây con bên phải, duyệt nút gốc, duyệt cây con bên trái

( Right - Root - Left )

 Duyệt theo thứ tự nút gốc sau ( Postoder ): Nút gốc sẽ được duyệt

sau cùng sau khi duyệt 2 cây con.

 Duyệt cây con bên trái, duyệt cây con bên phải, duyệt nút

gốc( Left – Right - Root )

 Duyệt cây con bên phải, duyệt cây con bên trái, duyệt nút

gốc( Right - Left- Root )

Trang 21

2 Cây nhị phân (Binary Tree)

2.2 d Duyệt qua các nút trên cây nhị phân

Duyệt nút gốc, duyệt cây con bên trái, duyệt cây con

Trang 22

2 Cây nhị phân (Binary Tree)

2.2 d Duyệt qua các nút trên cây nhị phân

Duyệt cây con bên trái, duyệt nút gốc, duyệt cây con

Trang 23

2 Cây nhị phân (Binary Tree)

2.2 d Duyệt qua các nút trên cây nhị phân

Duyệt cây con bên trái, duyệt cây con bên phải, duyệt

Trang 24

2 Cây nhị phân (Binary Tree)

2.2 d Duyệt qua các nút trên cây nhị phân

Vd: A,B,C,D,E,F,G

Trang 25

2 Cây nhị phân (Binary Tree)

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

2.3.1 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 trong đó tại mỗi nút,

khoá của nút đang xét lớn hơn khóa của tất cả các nút thuộc cây con trái và nhỏ hơn khoá của tất các nút thuộc cây con phải

 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ây nhị phân nói chung

Trang 26

2 Cây nhị phân (Binary Tree)

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

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

2.3.2.a Thêm vào một phần tử X vào cây

Trang 27

2 Cây nhị phân (Binary Tree)

2.3.2.a Thêm vào một phần tử X vào cây

Việc thêm một phần tử x vào cây phải đảm bảo điều kiện ràng

buộc của CNPTK

Hàm insert trả về giá trị -1,0,1 khi không đủ bộ nhớ, gặp nút cũ

hay thành công:

Trang 28

2 Cây nhị phân (Binary Tree)

int InsertTree(TREE &T,int k)

{

if (T!=NULL)

{ //neu can ca so trung nhau thi bo dong ngay duoi

if (T->Info==k) return 0;

if (T->Info>k) return InsertTree(T->pL,k);

else return InsertTree(T->pR,k);

} else

Trang 29

2 Cây nhị phân (Binary Tree)

2.3.2.b Tạo một cây NPTK: Ta có thể tạo CNPTK bằng cách lặp

lại quá trình thêm 1 phần tử vào một cây rỗng

void CreateTree(TREE &T)

Trang 30

2 Cây nhị phân (Binary Tree)

if (k>T->Info) return SearchTree(T->pR,k);

else return SearchTree(T->pL,k);

}

Trang 31

2 Cây nhị phân (Binary Tree)

if (k>T->Info) return SearchTree1(T->pR,k);

else return SearchTree1(T->pL,k);

}

Trang 32

2 Cây nhị phân (Binary Tree)

2.3.2.e Huỷ một phần tử có khoá X

int DelTree(TREE &T,int k)

{

if (T==NULL) return 0;

if (T->Info>k) return DelTree(T->pL,k);

if (T->Info<k) return DelTree(T->pR,k);

TNode *q=T->pR;

SearchStandfor(p,q);

} delete(p);

Trang 33

2 Cây nhị phân (Binary Tree)

2.3.2.e Huỷ một phần tử có khoá X

void SearchStandfor(TREE &p,TREE &q)

Trang 34

2 Cây nhị phân (Binary Tree)

Trang 35

2 Cây nhị phân (Binary Tree)

2.3.2.a Tìm kiếm trên cây nhị phân tìm kiếm BST

Tìm kiếm trong cây có tồn tại nút có khóa (Key) là SearchData

hay không

phân tìm kiếm thì tại 1 nút nểu Key của nút này khác với

SearchData:

 Nếu SearchData > Key của nút tìm ở cây con bên phải

 Nếu SearchData < Key của nút tìm ở cây con bên trái

Trang 36

2 Cây nhị phân (Binary Tree)

2.3.2.a Tìm kiếm trên cây nhị phân tìm kiếm BST (tt)

Cài đặt thuật toán

{

BSTType CurrNode = BSTree;

while (CurrNode !=NULL & CurrNode->Key != SeachData)

{

if (CurrNode ->Key > SearchData)

CurrNode = CurrNode ->BSTLeft;

Trang 37

2 Cây nhị phân (Binary Tree)

2.3.2.b Thêm vào một nút trên cây nhị phân tìm kiếm

cây nhị phân tìm kiếm sao cho sau khi thêm, cây vẫn là cây nhị phân tìm kiếm

Bao gồm các thao tác tìm kiếm vị trí thêm và thêm nút vào

cây

do đó nếu NewData trùng với Key của 1 trong các nút trong

cây thì không thực hiện thêm.

Trang 38

2 Cây nhị phân (Binary Tree)

2.3.2.b Thêm vào một nút trên cây nhị phân tìm kiếm (tt)

B6.1: AddLeft = False

B6.2: If (CurrNode->BSTRight != NULL)

CurrNode = CurrNode->BSTRight B8: Lặp lại B5

B9: IF (AddLeft == True)

CurrNode = CurrNode->BSTLeft

B10: ELSE

Trang 39

2 Cây nhị phân (Binary Tree)

2.3.2.b Thêm vào một nút trên cây nhị phân tìm kiếm (tt)

BSTType BSTAddNode (BSTType &BSTree, T NewData)

{ BSTType NewNode = BinTreeCreateNode(NewData);

if (NewNode == NULL) return (NewNode);

if (BSTree == NULL) BSTree = NewNode;

if (CurrNode->BSTRight != NULL)

CurrNode = CurrNode->BSTRight;

else break;

} }

Trang 40

2 Cây nhị phân (Binary Tree)

2.3.2.c Loại bỏ 1 nút trên cây

cho cây sau khi hủy nút đó thìcây vẫn là một cây nhị phân tìm kiếm

chúng ta sẽ biến cây thành một rừng

 Giả sử chúng ta cần hủy nút có thành phần dữ liệu (Key) là

DelData ra khỏi cây nhịphân tìm kiếm

 Hủy nút có địa chỉ là DelNode nàynếu tìm thấy

(Do vậy thuật toán này còn được gọi là thuật toán tìm kiếm và loại bỏtrên cây)

Trang 41

2 Cây nhị phân (Binary Tree)

2.3.2.c Loại bỏ 1 nút trên cây (tt)

Trong quá trình tìm kiếm cần giữ địa chỉ nút cha của nút cần

hủy là PrDelNode

 Việc hủy nút có địa chỉ DelNode có thể xảy ra một trong ba

trường hợp sau:

Trang 42

2 Cây nhị phân (Binary Tree)

2.3.2.c Loại bỏ 1 nút trên cây - DelNode là nút lá

bằng cách cho con trỏ

 Tiến hành hủy (delete) nút có địa chỉ DelNode này

Trang 43

2 Cây nhị phân (Binary Tree)

2.3.2.c Loại bỏ 1 nút trên cây - DelNode là nút có 01 cây con

cha-con giữa DelNode và cây con của nó và tiến hành hủy nút

có địa chỉ DelNode này

Trang 44

2 Cây nhị phân (Binary Tree)

2.3.2.c Loại bỏ 1 nút trên cây - DelNode là nút có 02 cây con

một trong hai cách sau đây

C1: Chuyển 02 cây con của DelNode về thành một cây con:

DelNode về thành cây con phải của cây con có nút gốc là nút

phảinhất trong cây con trái của DelNode

hoặc

củacây con có nút gốc là nút trái nhất trong cây con phải của DelNode

 Sau khi chuyển thì DelNode sẽ trở thành nút lá hoặc nút chỉ

có 01 cây con và chúng ta hủy DelNode như đối với trường

Trang 45

2 Cây nhị phân (Binary Tree)

2.3.2.c Loại bỏ 1 nút trên cây - DelNode là nút có 02 cây con

C2: Sử dụng phần tử thế mạng (standby):

của phần tử thế mạng là nút phải nhất trong cây con trái của

của DelNode (MLNode)

cho DelNode (DelNodeKey = MRNode->Key hoặc

DelNode->Key = MLNode-DelNode->Key) thì hủy nút thế mạng như đối với

trường hợp trên

Trang 46

2 Cây nhị phân (Binary Tree)

2.3.2.d Hủy toàn bộ cây

Thao tác chỉ đơn giản là việc thực hiện nhiều lần thao tác hủy một

nút trên cây nhị phân tìm kiếm cho đến khi cây trở thành rỗng.Hàm thực hiện việc hủy tất cả các nút trong cây nhị phân tìm kiếm

BSTree

void BSTDelete(BSTType &BSTree)

{

BSTType DelNode = BSTree;

while (BSTDeleteNodeTRS(BSTree, DelNode->Key) == 1)

DelNode = BSTree;

return;

}

Trang 47

3 Cây cân bằng (Balanced Tree)

3.1 Định nghĩa – Cấu trúc dữ liệu

Cây cân bằng tương đối:

 Là cây nhị phân thỏa mãn điều kiện là đối với mọi nút của

cây thì chiều cao của cây con trái và chiều cao của cây con phải của nút đó hơn kém nhau không quá 1 (theo định

nghĩa của Adelson-Velskii và Landis)

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

 Là cây nhị phân thỏa mãn điều kiện là đối với mọi nút của

cây thì số nút của cây con trái và số nút của cây con phải

của nút đó hơn kém nhau không quá 1

Trang 48

3 Cây cân bằng (Balanced Tree)

3.1 Định nghĩa – Cấu trúc dữ liệu (tt)

thêm thành phần Bal trong cấu trúc dữ liệu của mỗi nút

typedef struct BALNode

 Để quản lý cây cân bằng, chỉ cần quản lý địa chỉ nút gốc của

Trang 49

3 Cây cân bằng (Balanced Tree)

3.1 Định nghĩa – Cấu trúc dữ liệu (tt)

 Giá trị chỉ số cân bằng Bal tại 1 nút gốc của cây con trong cây

cân bằng tương đối bằng hiệu số giữa chiều cao cây con trái

và chiều cao cây con phải của nút đó

 Giá trị chỉ số cân bằng Bal tại 1 nút gốc của cây con trong cây

cân bằng hoàn toàn = hiệu số giữa số nút cây con trái và số nút cây con phải của nút đó

-1 <= Bal <= 1 thì cây là cây cân bằng Phạm vi từ -1  1 là phạm vi cho phép của chỉ số cân bằng Bal

 Nếu Bal = 0: cây con trái & cây con phải đều nhau

 Nếu Bal = -1: cây con trái nhỏ hơn cây con phải (lệch phải)

Trang 50

3 Cây cân bằng (Balanced Tree)

3.2 Các thao tác trên cây cân bằng

Các thao tác trên cây cân bằng áp dụng cho cây nhị phân tìm

kiếm cân bằng tương đối

3.2.a Thêm 1 nút vào cây cân bằng

3.2.b Hủy một nút khỏi cây cân bằng

Trang 51

3 Cây cân bằng (Balanced Tree)

3.2.a Thêm 1 nút vào cây cân bằng

vào trong cây cân bằng BALTree sao cho sau khi thêm

BALTree vẫn là một cây cân bằng

 Để thực hiện điều này cần tìm kiếm vị trí của nút cần thêm là

nút con trái hoặc nút con phải của một nút PrNewNode tương

tự như trong cây nhị phân tìm kiếm

của PrNewNode thì chỉ số cân bằng của các nút từ

PrNewNode trở về các nút trước sẽ bị thay đổi dây chuyền và chúng ta phải lần ngược từ

Trang 52

3 Cây cân bằng (Balanced Tree)

3.2.a Thêm 1 nút vào cây cân bằng

quá phạm vi cho phép (bằng –2 hoặc +2) thì tiến hành cân

bằng lại cây ngay tại nút AncestorNode này

thể theo các trường hợp như sau:

Trường hợp 1: Nếu AncestorNode->Bal = -2:

(AncR->Bal = -1)

(AncR->Bal = 1)

Trang 53

3 Cây cân bằng (Balanced Tree)

3.2.a Thêm 1 nút vào cây cân bằng

quá phạm vi cho phép (bằng –2 hoặc +2) thì chúng ta tiến

hành cân bằng lại cây ngay tại nút AncestorNode này

thể theo các trường hợp như sau:

Trường hợp 1: Nếu AncestorNode->Bal = -2:

(AncR->Bal = -1)

(AncR->Bal = 1)

Trang 54

3 Cây cân bằng (Balanced Tree)

3.2.a (tt) Trường hợp 1: Nếu AncestorNode->Bal = -2:

Gọi: AncL = AncestorNode->BAL_Left

AncR = AncestorNode->BAL_Right

=>AncL có chiều cao là h và AncR có chiều cao là h+2 (h 0)

=>Có ít nhất 1 cây con của AncR có chiều cao là h+1

Gọi: AncRL = AncR->BAL_Left

AncRR = AncR->BAL_Right

Ngày đăng: 06/03/2014, 03:20

TỪ KHÓA LIÊN QUAN

w