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

Bài giảng cấu trúc dữ liệu chương 3 TS trần cao đệ

52 279 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 52
Dung lượng 456,73 KB

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

Nội dung

Node PARENTNode n,Tree T{if EMPTY_TREET || n>T.MaxNode-1 return NULL; else return T.Parent[n]; }... } while T.MaxNodeMAXLENGTH;printf"Nhap nhan cua nut goc ";... Cài đ t cây b ng con trC

Trang 1

Ch ng 3: C u trúc cây

Trees

Trang 2

̈ M i quan h cha con đ c bi u di n theo qui c nút cha

dòng trên nút con dòng d i và đ c n i b i m t

đ o n th ng

Trang 6

̈ Nút không có h u du th c s

g i là nút lá (leaf)

̈ Nút không ph i là lá ta còn g i

là nút trung gian (interior)

̈ Cây con c a m t cây là m t

Trang 8

Duy t cây

̈ Duy t cây là m t qui t c cho phép đ i qua l n l t t t

c các nút c a cây m i nút đ úng m t l n

̈ Danh sách li t kê các nút (tên nút/ giá tr ) theo th

t đ i qua g i là danh sách duy t cây

̈ Ba cách duy t cây quan tr ng:

̈ duy t ti n t (preorder),

̈ duy t trung t (inorder),

̈ duy t h u t (posorder).

Trang 13

*

Trang 14

Bi u th c ti n t - * a c b

Bi u th c trung t a * c – b

Bi u th c h u t a c * b

Trang 15

-KI U D LI U TR U T NG

CÂY

̈ Hàm PARENT(n,T) cho nút cha c a nút n trên cây T

̈ Hàm LEFTMOST_CHILD(n,T) cho nút con trái nh t c a nút n trên cây

T, n u n là lá thì hàm cho giá tr NULL

̈ Hàm RIGHT_SIBLING(n,T) cho nút anh em ru t ph i nút n trên cây T,

n u n không có anh em ru t ph i thì hàm cho giá tr NULL

̈ Hàm LABEL_NODE(n,T) cho nhãn t i nút n c a cây T

̈ Hàm ROOT(T) tr ra nút g c c a cây T N u Cây T r ng thì hàm tr v

NULL

̈ Hàm CREATEi(v,T1,T2, ,Ti),v i i=0 n, th t c t o cây m i có nút g c là

n đ c gán nhãn v và có i cây con T1, ,Ti

̈ N u n= 0 thì th t c t o cây m i ch g m có 1 nút đ n đ c là n có nhãn

v

̈ Hàm EMPTY_TREE(T) tr v true n u cây r ng, ng c l i nó tr v

false

Trang 16

̈ Các nút con cùng m t nút cha

đ c đ ánh s l n l t t trái sang ph i

Trang 17

87

65

Maxnode

Maxlength

Trang 18

Ví d khác

A

B

E D

C

G

J I

0

Trang 20

Node PARENT(Node n,Tree T){

if (EMPTY_TREE(T) || (n>T.MaxNode-1))

return NULL;

else return T.Parent[n];

}

Trang 21

Xác đ nh nhãn c a nút trên cây

DataType LABEL_NODE(Node n,Tree T){

if (!EMPTY_TREE(T) && (n<=T.MaxNode-1))

Trang 28

} while ((T.MaxNode<1) || (T.MaxNode>MAXLENGTH));

printf("Nhap nhan cua nut goc ");

Trang 29

̈ Ch ng trình chính đ th c hi n yêu c u đ bài nh sau:

Trang 30

Bi u di n cây b ng danh sách các con

A B C D E F G J H I

8

Trang 31

Bi u di n theo con trái nh t và anh em

ru t ph i

̈ Các c u trúc đã dùng đ mô t cây trên có m t s nh c

đ i m: không tr giúp phép t o m t cây l n t các cây nh h n, ngh a là ta khó có th cài đ t phép toán CREATEi

̈ Ch ng h n CREATE2(v,T1,T2) chúng ta ph i chép hai cây

T1, T2 vào m ng th ba r i thêm m t nút n có nhãn v và hai nút con là g c c a T1 và T2

̈ Ta thay th m ng các Header b ng m ng CELLSPACE ch a các b n ghi (struct) có ba tr ng Data, Leftmost_Child,

Right_Sibling

̈ Data gi nhãn c a nút,

̈ Leftmost_Child là m t con nháy ch đ n con trái nh t c a nút,

̈ Right_Sibling là con nháy ch đ n nút anh ru t ph i

̈ H n n a m ng này gi t t c các nút c a t t c các cây

Trang 32

Các khai báo c n thi t là

Trang 33

Parent Right_

Sibling

Leftmost_

Child

Data Ch

s

6

8

5 null

Null C

7

0

6

Null null

3 A

5 Root

3 null

Null E

4

5 7

1 B

3

8

2 Available

3 4

Null D

Trang 34

Hàm CREATE2 t o cây m i t hai cây con

int CREATE2(DataType v, int T1, int T2){

// T1, T2 là hai con nháy tr t i hai nút g c c a hai cây con

// Hàm tr ra con nháy tr t i nút g c m i

//l y ô đ u danh sách available đ t o m t nút m i trên cây

int temp=Available ; //available nh là m t bi n toàn c c

Trang 35

Leftmost_Child Data

Ch s

1

F

8

3 4

D

7

0

6

1 8

C

5 Root

3

E

4

1 5

7 B

3

6

2 Available

3 A

1

0

Trang 36

Cài đ t cây b ng con tr

Các khai báo nh sau

typedef int DataType;

typedef struct Cell{

typedef Cell* Node;

typedef Node Tree;

Trang 37

Node Create2(DataType v, Tree left, Tree right){

Trang 38

CÂY NH PHÂN (BINARY TREES)

̈ Cây nh phân là cây r ng

̈ Ta qui c v nút con trái

bên trái nút cha và nút con

Trang 39

Duy t cây

(Node-Left-Right): duy t nút g c, duy t

ti n t con trái r i duy t ti n

t con ph i.

(Left-Node-Right): duy t trung t con

trái r i đ n nút g c sau đó là

duy t trung t con ph i.

(Left-Right-Node): duy t h u t con trái

r i duy t h u t con ph i sau

đó là nút g c.

nút

left right

Trang 40

HIDJEBKLFMGCA HIDJEBKLFMGCA

H u t :

HDIBJEAKFLCMG HDIBJEAKFLCGM

Trung t :

ABDHIEJCFKLGM ABDHIEJCFKLGM

Trang 41

Cài đ t cây nh phân

typedef int DataType;

typedef struct Node{

Trang 42

Xác đ nh con trái c a m t nút

Tree LEFTCHILD(Tree n){ //n co

kieu Node*, tuc la Tree

if (n!=NULL) return n->left;

else return NULL;

}

Xác đ nh con ph i c a m t nút

Tree RIGHTCHILD(Tree n){

if (n!=NULL) return n->right;

else return NULL;

if(EMPTY_TREE(T)) return 0;

else return 1 +NB_NODES(LEFTCHILD(T)) + NB_NODES(RIGHTCHILD(T)); }

T o cây m i t hai cây có s n Tree Create2(DataType v,Tree l,Tree r){

Tree N;

N=(Node*)malloc(sizeof(Node)); N->Data=v;

N->left=l;

N->right=r;

return N;

}

Trang 46

̈ SO nut cua cay: 6

Tree T1 = Create2('D', NULL, NULL);

Tree T2 = Create2('E', NULL, NULL);

Tree T3 = Create2('F', NULL, NULL);

Trang 47

thu c cây con bên trái và nh h n

khoá c a t t c các nút thu c cây

con bên ph i.

typedef <ki u d li u c a khoá> KeyType;

typedef struct Node{

15

35

37

Trang 48

Tìm ki m 1 nút có khóa x

20

10

17 5

15

35

37

Tree Search (KeyType x,Tree Root){

if (Root==NULL) return NULL;

else if(Root->Key==x)

return Root;

else if (Root->Key<x)

return Search(x,Root->right);else

return Search(x,Root->left);}

Th i gian tìm ki m 1 nút : O(h), h là chi u cao cây

Trang 49

Thêm m t khoá vào cây TKNP

void InsertNode(KeyType x,Tree& Root ){

15

35

37

Trang 50

15

Trang 51

else if (x > Root->Key) DeleteNode(x,Root->Right);

else if ((Root->Left==NULL) && (Root>Left==NULL) && (Root->Right==NULL)) Root=NULL;

else

if (Root->Left == NULL) Root = Root->Right;

else if (Root->Right==NULL) Root = Root->Left;

else Root->Key = DeleteMin(Root->Right);

}

Ngày đăng: 03/12/2015, 06:46

TỪ KHÓA LIÊN QUAN

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