Tải bản đầy đủ (.pdf) (52 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (456.73 KB, 52 trang )

Ch

ng 3: C u trúc cây
Trees
TS. Tr n Cao
N m 2010

1


Thu t ng c b n
̈

Cây: là m t t p h p các ph n t g i là nút (nodes):
̈
̈
̈
̈
̈
̈
̈

Có m t nút đ c phân bi t g i là nút g c (root).
Quan h cha - con (parenthood): xác đ nh h th ng c u
trúc phân c p trên các nút.
M i nút, tr nút g c, có duy nh t m t nút cha.
M t nút có th có nhi u nút con ho c không có nút con
nào.
M i nút bi u di n m t ph n t trong t p h p đang xét và
nó có th có m t ki u nào đó b t k .
Bi u di n nút b ng m t kí t , m t chu i ho c m t s ghi


trong vòng tròn.
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.
2


Ví d m t cây
1

2

5

3

6

7

9

4

10

8

3



nh ngh a
̈

̈

̈

M t nút đ n đ c là m t cây.
Nút này c ng chính là nút g c
c a cây.
Gi s ta có n là m t nút đ n
đ c và k cây T1,.., Tk v i các
nút g c t ng ng là n1,.., nk thì
có th xây d ng m t cây m i
b ng cách cho nút n là cha c a
các nút n1,.., nk. Cây m i này có
nút g c là nút n và các cây T1,..,
Tk đ c g i là các cây con.
T p r ng c ng đ c coi là m t
cây và g i là cây r ng kí hi u
∅.

n

n1

n2

nk


T1

T2

Tk

4


Thu t ng
̈

̈
̈
̈

̈
̈

̈

ng đi: chu i các nút n1,.., nk,
trong đó ni là nút cha c a nút ni+1,
v i i=1..k-1
dài đ ng đi = s nút – 1
ng đi t m t nút đ n chính nó
có đ dài b ng không.
N u có đ ng đi t nút a đ n nút
b thì ta nói a là ti n b i (ancestor)

c a b, còn b g i là h u du
5
(descendant) c a nút a.
m t nút v a là ti n b i v a là h u
du c a chính nó.
Ti n b i ho c h u du c a m t
nút khác v i chính nó g i là ti n
b i ho c h u du th c s .
Nút g c không có ti n b i th c
s .

1

2

3

6

7

9

4

10

8

5



̈
̈
̈

̈

̈
̈

̈

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
nút cùng v i t t c các h u du
c a nó.
5
Chi u cao c a m t nút là đ
dài đ ng đi l n nh t t nút đó
t i lá.
Chi u cao c a cây là chi u cao
c a nút g c.
sâu c a m t nút là đ dài
đ ng đi t nút g c đ n nút
đó.
Các nút có cùng m t đ sâu i

ta g i là các nút có cùng m t
m c i.

1

2

3

6

7

9

4

10

8

6


Th t nút
̈

̈
̈


̈

̈

N u ta phân bi t th t các nút
con c a cùng m t nút thì cây
g i là cây có th t
Th t qui c t trái sang
ph i.
N u không phân bi t rõ ràng
th t các nút thì ta g i là cây
không có th t .
Các nút con cùng m t nút cha
g i là các nút anh em ru t
(siblings).
Quan h "trái sang ph i" c a
các anh em ru t có th m r ng
cho hai nút b t k .

A

B

C

A

C

B


7


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).

8


̈

̈

̈


Cây r ng:
̈ ti n t , trung t , h u t =
R NG.
Cây ch có m t nút n:
̈ ti n t , trung t , h u t c a
cây= n.

n

T

n1

n2

nk

T1

T2

Tk

T g c n, các cây con T1,…, Tk:
̈ Ti n t (T) = n, ti n t (T1),
…, ti n t (Tk)
̈ Trung t (T) = Trung t (T1), n,
trung t (T2), …, trung t (Tk)
̈ H u t (T) = h u t (T1), …,

h u t (Tk), n
9


Ví d duy t cây
1

̈

̈

̈

Ti n t
1, 2, 5, 6, 3, 7, 8, 9, 10,
4
Trung t
5, 2, 6, 1, 8, 7, 3, 9, 10,
4
H ut
5, 6, 2, 8, 7, 9, 10, 3, 4,
1

2

5

3

6


7

9

4

10

8

10


Bài t p
A

B

H

C

D

E

K

F


L

Duy t Ti n t , trung t , h u t cây
̈ ti n t : A B C D E F H K L
̈ trung t : C B E D F A K H L
̈ h ut :CEFDBKLHA

11


Cây có nhãn và cây bi u th c
̈

Ta th ng l u tr k t h p m t
nhãn (label) ho c còn g i là m t
giá tr (value) v i m t nút c a
cây. Nh v y nhãn c a m t nút
không ph i là tên nút mà là giá tr
đ c l u gi t i nút đó.

n1

+

*
_

n2


n3

n4

n5

n6

n7

a

b

a

c

Bi u th c: (a+b)*(a-c)
̈

Qui t c bi u di n bi u th c toán
h c
E1 E2
E1

E2
12



+

+

a+b
a

b

b

a

-

a-b
a

b
-

a*c - b

*

a

*

b


c

a

-

c

b
13


cây bi u th c
̈

-

Khi duy t m t cây bi u di n
m t bi u th c toán h c và li t
kê nhãn c a các nút theo th t
duy t thì ta có:
̈

̈

̈

Bi u th c d ng ti n t hay bi u
th c ti n t (prefix) t ng ng

v i phép duy t ti n t c a cây.
Bi u th c d ng trung t hay bi u
th c trung t (infix) t ng ng
v i phép duy t trung t c a cây.
Bi u th c d ng h u t hay bi u
th c h u t (posfix) t ng ng
v i phép duy t h u t c a cây.

*

a

b

c

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 14


KI U D
̈
̈
̈
̈
̈
̈

̈


LI U TR U T
CÂY

NG

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.

15


Cài đ t cây b ng m ng
̈
̈

gán tên cho các nút l n l t là 0,1,
2, .., n-1.

Dùng m t m ng m t chi u A đ
l u tr cây:
̈
̈

̈

A[i] = j v i j là nút cha c a nút i.
N u i là nút g c ta cho a[i] = Null

N u cây T là cây có nhãn:
̈

̈

Dùng thêm m t m ng m t chi u
th hai L ch a các nhãn: cho L[i]
= x v i x là nhãn
Ho c khai báo m ng a là m ng
c a các struct có hai tr ng:
̈
̈

tr
tr

ng Parent gi ch s nút cha;
ng Data gi nhãn c a nút

̈


̈
̈

MaxNode gi s nút hi n t i đang
có trên cây.
Hàm PARENT(n,T) t n ch m t
h ng th i gian
Hàm đòi h i thông tin v các con
không làm vi c t t
̈

qui c vi c đ t tên cho các nút
(đánh s th t ) nh sau:
̈
̈
̈

ánh s theo th t t ng d n b t
đ u t i nút g c.
Nút cha đ c đánh s tr c các
nút con.
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

16


1


2

3

5

6

7

4

9

10

Maxlength

8

Ch
s

1

2

3


4

5

6

7

8

9

10

Pare
nt

-1

1

1

1

2

2

3


7

3

3

data
Maxnode

17


Ví d khác
A
1

3

C

B
4

D

F
5

0


8
E

G
6

I

2

J

9

H
7

18


Khai báo c u trúc d li u
#define MAXLENGTH ... /* ch s t i đa c a m ng */
#define NULL -1
typedef ... DataType;
typedef int Node;
typedef struct {
/* L u tr nhãn (d li u) c a nút trong cây */
DataType Data[MAXLENGTH];
/* L u tr cha c a các nút trong cây theo nguyên t c:

Cha c a nút i s l u v trí i trong m ng */
Node Parent[MAXLENGTH];
/* S nút th c s trong cây */
int MaxNode;
} Tree;
Tree T;

19


Kh i t o cây r ng
void MAKENULL_TREE (Tree& T){
T.MaxNode=0;
}
Ki m tra cây r ng
int EMPTY_TREE(Tree T){
return T.MaxNode == 0;
}
Xác đ nh nút cha c a nút trên cây
Node PARENT(Node n,Tree T){
if (EMPTY_TREE(T) || (n>T.MaxNode-1))
return NULL;
else return T.Parent[n];
}
20


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))

return T.Data[n];
}
Hàm xác đ nh nút g c trong cây
Node ROOT(Tree T){
if (!EMPTY_TREE(T)) return 0;
else return NULL;
}
21


Hàm xác đ nh con trái nh t c a m t nút
Node LEFTMOST_CHILD(Node n,Tree T){
Node i;
if (n<0) return NULL;
i=n+1;/* V trí nút đ u tiên hy v ng là con c a nút n */
while (i<=T.MaxNode-1)
if (T.Parent[i]==n) return i;
else i=i+1;
return NULL;
}

22


Hàm xác đ nh anh em ru t ph i c a m t nút
Node RIGHT_SIBLING(Node n,Tree T){
Node i,parent;
if (n<0) return NULL;
parent=T.Parent[n];
i=n+1;

while (i<=T.MaxNode-1)
if (T.Parent[i]==parent) return i;
else i=i+1;
return NULL;
}

23


Th t c duy t ti n t
void PreOrder(Node n,Tree T){
printf("%c ",LABEL_NODE(n,T));
Node i=LEFTMOST_CHILD(n,T);
while (i!=NULL){
PreOrder(i,T);
i=RIGHT_SIBLING(i,T);
}
}

24


Th t c duy t trung t
void InOrder(Node n,Tree T){
Node i=LEFTMOST_CHILD(n,T);
if (i!=NULL) InOrder(i,T);
printf("%c ",LABEL_NODE(n,T));
i=RIGHT_SIBLING(i,T);
while (i!=NULL){
InOrder(i,T);

i=RIGHT_SIBLING(i,T);
}
}

25


×