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

index of cnpmpth02004slidepdf

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 (1.11 MB, 22 trang )

<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>

CH

ƯƠ

NG 1: CÂY (TREE)



GV. Ngô Công Th

ng



B

môn Công ngh

ph

n m

m


Khoa Công ngh

thông tin


Website: dse.hua.edu.vn/ncthang



Email:



Ch

ươ

ng 1: Cây (Tree)



1.

Đị

nh ngh

ĩ

a và khái ni

m


2. Cây nh

phân



</div>
<span class='text_page_counter'>(2)</span><div class='page_container' data-page=2>

Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01


1.

Đị

nh ngh

ĩ

a và khái ni

m



1.1.

Đị

nh ngh

ĩ

a cây (tree)



l

Cây là m

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



l

M

t cây khơng có nút nào g

i là cây r

ng


(null tree).




l

Các ví d

v

cây



1.3


Ví d

1: M

c l

c c

a m

t ch

ươ

ng



đượ

c bi

u di

n d

ng cây



Ch

ươ

ng 6


6.1


6.2



6.2.1


6.2.2


6.3



</div>
<span class='text_page_counter'>(3)</span><div class='page_container' data-page=3>

Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01


Ví d

2: Bi

u th

c s

h

c

đượ

c


bi

u di

n d

ng cây



x+y*(z-t)+u/v



1.5


Ví d

3: Các t

p bao nhau

đượ

c


bi

u di

n d

ng cây



</div>
<span class='text_page_counter'>(4)</span><div class='page_container' data-page=4>

Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01



1.2. Các khái ni

m



l

G

c (Root): G

c là nút

đặ

c bi

t khơng có


nút cha.



Ví d

3: A là g

c. A là cha c

a B, E, F.


B, E, F là con c

a A.



B, E, F c

ũ

ng là g

c c

a các cây con c

a A



l

C

p (Degree): S

con c

a m

t nút g

i là


c

p c

a nút

đ

ó.



Ví d

3: A có c

p là 3. E, F có c

p là 0.


B có c

p là 2.



1.7


1.2. Các khái ni

m (

<i>ti</i>

<i>ế</i>

<i>p</i>

)



l

Lá (Leaf): Nút có c

p b

ng khơng g

i là lá hay


nút t

n cùng.



Ví d

3: C,D,E,F là lá.



l

Nút nhánh (Branch Node): Nút không là lá

đượ

c


g

i là nút nhánh hay nút trong.



<i>Ví d</i>

<i>ụ</i>

<i> 3:</i>

B là nút nhánh.




l

M

c (Level): G

c cây có m

c là 1. N

ế

u nút cha


có m

c là i thì nút con có m

c là i+1.



</div>
<span class='text_page_counter'>(5)</span><div class='page_container' data-page=5>

Ngơ Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01


1.2. Các khái ni

m (

<i>ti</i>

<i>ế</i>

<i>p</i>

)



l

Chi

u cao c

a cây (Height) hay chi

u sâu c

a


cây (Depth): Là s

m

c l

n nh

t c

a nút có trên


cây.



Ví d

1: Cây có chi

u cao là 3


Ví d

2: Cây có chi

u cao là 5


Ví d

3: Cây có chi

u cao là 3



l

Đườ

ng

đ

i (Path): N

ế

u n

<sub>1</sub>

, n

<sub>2</sub>

, ..., n

<sub>k</sub>

là các dãy nút


mà n

<sub>i</sub>

là cha c

a n

<sub>i+1</sub>

(1

i<k) thì dãy

đ

ó g

i là



đườ

ng

đ

i t

n

<sub>1</sub>

đế

n n

<sub>k</sub>

.

Độ

dài c

a

đườ

ng

đ

i


b

ng s

nút tr

đ

i 1. .



Ví d

3:

Đườ

ng

đ

i t

A

đế

n C c

độ

dài là 3-1=2.



Đườ

ng

đ

i t

A

đế

n E c

độ

dài là 2-1=1.



1.9


1.2. Các khái ni

m (

<i>ti</i>

<i>ế</i>

<i>p</i>

)



l

N

ế

u th

t

các cây con c

a m

t nút

đượ

c coi



tr

ng thì cây

đ

ang xét là cây có th

t

, ng

ượ

c l

i


là cây khơng có th

t

.



l

Th

ườ

ng thì th

t

các cây con c

a m

t nút



</div>
<span class='text_page_counter'>(6)</span><div class='page_container' data-page=6>

Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01


1.2. Các khái ni

m (

<i>ti</i>

<i>ế</i>

<i>p</i>

)



l

Đố

i v

i cây, ngoài quan h

cha con, ng

ườ

i


ta còn m

r

ng ph

ng theo quan h

trong


gia t

c.



l

R

ng (Forest): N

ế

u có m

t t

p h

u h

n


các cây phân bi

t thì ta g

i t

p

đ

ó là r

ng.



l

N

ế

u b

nút g

c c

a m

t cây thì ta s


m

t r

ng.



1.11


2. Cây nh

phân



2.1.

Đị

nh ngh

ĩ

a và tính ch

t


2.1.1.

Đị

nh ngh

ĩ

a cây nh

phân



l

Cây nh

phân là d

ng

đặ

c bi

t c

a c

u trúc


cây, m

i nút trên cây ch

có t

i

đ

a là 2 con.



</div>
<span class='text_page_counter'>(7)</span><div class='page_container' data-page=7>

Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01



Ví d

1: Hai cây sau

đ

ây là khác nhau



1.13


Ví d

2: Cây nh

phân suy bi

ế

n có


d

ng m

t danh sách tuy

ế

n tính



Cây l

ch trái



</div>
<span class='text_page_counter'>(8)</span><div class='page_container' data-page=8>

Ngơ Cơng Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01


Ví d

2: Cây nh

phân suy bi

ế

n có d

ng



m

t danh sách tuy

ế

n tính (

<i>ti</i>

<i>ế</i>

<i>p</i>

)



Cây zíc z

c



1.15


2.1.1.

Đị

nh ngh

ĩ

a cây nh

phân (

<i>ti</i>

<i>ế</i>

<i>p</i>

)



</div>
<span class='text_page_counter'>(9)</span><div class='page_container' data-page=9>

Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01


2.1.1.

Đị

nh ngh

ĩ

a cây nh

phân (

<i>ti</i>

<i>ế</i>

<i>p</i>

)



l

Cây nh

phân

đầ

y

đủ

: Là cây nh

phân mà các


nút

m

i m

c c

a nút nhánh

đề

u có hai con.


Cây nh

phân

đầ

y

đủ

là tr

ườ

ng h

p

đặ

c bi

t c

a


cây nh

phân hồn ch

nh.




1.17


2.1.2. Tính ch

t



l

S

l

ượ

ng t

i

đ

a các nút

m

c i trên 1 cây


nh

phân là 2

(i-1)

<sub>(i</sub>

<sub>1).</sub>



</div>
<span class='text_page_counter'>(10)</span><div class='page_container' data-page=10>

Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01


2.2. L

ư

u tr

cây nh

phân



2.2.1. L

ư

u tr

k

ế

ti

ế

p



l

V

i cây nh

phân

đầ

y

đủ

, ta

đ

ánh s

các


nút t

1 tr

đ

i, t

trái qua ph

i, h

ế

t m

c


này

đế

n m

c khác.



l

Dùng véc t

ơ

V l

ư

u tr

cây nh

phân, nút th


i c

a cây

đượ

c l

ư

u tr

ơ nh

V[i]. Ví d

:



1.19


2.2.1. L

ư

u tr

k

ế

ti

ế

p (

<i>ti</i>

<i>ế</i>

<i>p</i>

)



l

V

i cách l

ư

u tr

b

ng m

ng, khi bi

ế

t

đị

a


ch

c

a nút cha s

tính

đượ

c

đị

a ch

c

a


nút con và ng

ượ

c l

i. N

ế

u nút cha là i thì


con trái là 2i và con ph

i là 2i+1. N

ế

u nút


con là i thì nút cha là [i/2].




l

N

ế

u cây không

đầ

y

đủ

ta ph

i thêm các


nút tr

ng vào

để đươ

c cây nh

phân

đầ

y



</div>
<span class='text_page_counter'>(11)</span><div class='page_container' data-page=11>

Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01


Ví d



1.21


2.2.2. L

ư

u tr

ph

n tán



l

Trong cách l

ư

u tr

này, m

i nút

ng v

i m

t


ph

n t

nh

có quy cách d

ướ

i

đ

ây.



l

Để

truy nh

p vào các nút trong cây nh

phân c

n


có m

t con tr

T tr

vào nút g

c c

a cây

đ

ó.



</div>
<span class='text_page_counter'>(12)</span><div class='page_container' data-page=12>

Ngơ Cơng Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01


Ví d



1.23


2.3. Các phép tốn duy

t cây nh

phân



l

Phép x

lý các nút trên cây (g

i chung là



phép th

ă

m - visit) là cách th

ă

m t

t c

các nút


c

a cây m

t cách h

th

ng, sao cho m

i nút



ch

đượ

c th

ă

m m

t l

n.



l

M

t nút có 2 con, ta có 3 cách duy

t, các



cách duy

t

đượ

c

đị

nh ngh

ĩ

a

đệ

quy nh

ư

sau:



l

Cách 1: Duy

t theo th

t

tr

ướ

c (preorder


traversal)



</div>
<span class='text_page_counter'>(13)</span><div class='page_container' data-page=13>

Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01


2.3. Duy

t cây nh

phân (

<i>ti</i>

<i>ế</i>

<i>p</i>

)



l

Cách 2: Duy

t theo th

t

gi

a (inorder


traversal)



l

Duy

t cây con trái theo th

t

gi

a



l

Th

ă

m g

c



l

Duy

t cây con ph

i theo th

t

gi

a



l

Cách 3: Duy

t theo th

t

sau ( postorder


traversal)



l

Duy

t cây con trái theo th

t

sau



l

Duy

t cây con ph

i theo th

t

sau



l

Th

ă

m g

c




1.25


</div>
<span class='text_page_counter'>(14)</span><div class='page_container' data-page=14>

Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01


2.3. Duy

t cây nh

phân (

<i>ti</i>

<i>ế</i>

<i>p</i>

)



l

Các th

t

c duy

t cây nh

phân

đề

u

đượ

c


vi

ế

t

d

ng

đệ

qui.



l

Gi

s

cây nh

phân l

ư

u tr

b

ng danh


sách liên k

ế

t, T là con tr

tr

t

i g

c, phép


th

ă

m là in giá tr

tr

ườ

ng Infor c

a nút

đ

ó.



1.27


Duy

t cây theo th

t

tr

ướ

c:



Procedure PreOrder(T)


If T =

φ

then



Return


Else Begin



Write(Infor(T))



Call PreOrder(Lptr(T))


Call PreOrder(Rptr(T))



</div>
<span class='text_page_counter'>(15)</span><div class='page_container' data-page=15>

Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01



Duy

t cây theo th

t

gi

a:



Procedure InOrder(T)


If T =

φ

then Begin



Return


End


Else Begin



Call InOrder(Lptr(T))


Write(Infor(T))



Call InOrder(Rptr(T))


End;



Return



1.29


Duy

t cây theo th

t

sau:



Procedure PostOrder(T)


If T =

φ

then Begin



</div>
<span class='text_page_counter'>(16)</span><div class='page_container' data-page=16>

Bài t

p



l

Bài 1:



l

Xây d

ng cây nh

phân bi

u di

n bi

u th

c:



(a+b/c)*(d-e*f)



l

V

s

ơ đồ

l

ư

u tr

cây nh

phân bi

u di

n bi

u


th

c

d

ng l

ư

u tr

k

ế

ti

ế

p, l

ư

u tr

liên k

ế

t.



l

Cho bi

ế

t th

t

các nút khi duy

t cây nh

phân



đ

ó theo 3 cách.



Ngơ Cơng Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01 1.31


Bài t

p (ti

ế

p)



Bài 2. Cho cây nh

phân d

ướ

i

đ

ây. Hãy



l

V

s

ơ

đồ

l

ư

u tr

cây nh

phân

d

ng l

ư

u tr

k

ế

ti

ế

p và l

ư

u tr


liên k

ế

t



</div>
<span class='text_page_counter'>(17)</span><div class='page_container' data-page=17>

Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01


<b>3. Cây t</b>

<b>ổ</b>

<b>ng quát</b>



l

Cây t

ng quát là cây có c

p m nào

đ

ó.



l

N

ế

u bi

u di

n cây t

ng quát b

ng danh sách


liên k

ế

t thì m

t nút có bao nhiêu nhánh s


b

y nhiêu tr

ườ

ng liên k

ế

t, cách bi

u di

n này


ph

c t

p. N

ế

u bi

u di

n cây b

ng m

ng thì quá


trình x

lý c

ũ

ng r

t ph

c t

p.




l

Để

đơ

n gi

n ta bi

u di

n cây t

ng quát b

ng cây


nh

phân. Ta nh

n th

y v

i b

t k

nút nào trên


cây t

ng qt n

ế

u có thì ch

có:



l

M

t nút con c

c trái (con c

)



l

M

t nút em k

c

n ph

i



1.33


<b>3. Cây t</b>

<b>ổ</b>

<b>ng quát</b>



l

Khi chuy

n sang cây nh

phân t

ươ

ng

đươ

ng,


m

i nút có con trái là con c

c trái, con ph

i là


em k

c

n ph

i.



</div>
<span class='text_page_counter'>(18)</span><div class='page_container' data-page=18>

Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01


Ví d

:



Cây t

ng quát

Cây nh

<sub>t</sub>

<sub>ươ</sub>

<sub>ng </sub>

<sub>đươ</sub>

phân

<sub>ng</sub>



1.35


<b>3. Cây t</b>

<b>ổ</b>

<b>ng quát</b>



l

Sau khi chuy

n thành cây nh

phân t

ươ

ng



đươ

ng ta có th

l

ư

u tr

cây t

ng quát


b

ng danh sách liên k

ế

t.




</div>
<span class='text_page_counter'>(19)</span><div class='page_container' data-page=19>

Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01


4.

ng d

ng



4.1. Cây bi

u di

n bi

u th

c



l

Bi

u th

c s

h

c v

i các phép tốn 2 ngơi nh

ư


+ - * / có th

bi

u di

n b

i cây nh

phân có các


nút v

i quy cách nh

ư

sau:



1.37


4.1. Cây bi

u di

n bi

u th

c (

<i>ti</i>

<i>ế</i>

<i>p</i>

)



</div>
<span class='text_page_counter'>(20)</span><div class='page_container' data-page=20>

Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01


Ví d

: Bi

u di

n bi

u th

c a*b+c/2


b

ng cây nh

phân sau:



1.39


4.2.

Đị

nh giá tr

bi

u th

c



l

Thu

t gi

i

đị

nh giá tr

bi

u th

c bi

u di

n b

i cây nh

phân có g

c E.


Thu

t gi

i này

đượ

c vi

ế

t d

ướ

i d

ng

đệ

quy:



Function EVAL(E)


Case




TYPE(E)=0: Begin F:=RPTR(E)


Return(Value(F))


End



TYPE(E)=1: Return ( EVAL(LPTR(E))+EVAL(RPTR(E)))


TYPE(E)=2: Return ( EVAL(LPTR(E))-EVAL(RPTR(E)))


TYPE(E)=3: Return ( EVAL(LPTR(E))*EVAL(RPTR(E)))


TYPE(E)=4: Return ( EVAL(LPTR(E))/EVAL(RPTR(E)))


TYPE(E)=5: Return ( - EVAL(RPTR(E)))



Else Return(00)


End case



</div>
<span class='text_page_counter'>(21)</span><div class='page_container' data-page=21>

Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01


4.3. Xác

đị

nh 2 bi

u th

c t

ươ

ng

đươ

ng



l

Cho 2 cây nh

phân bi

u di

n bi

u th

c tr


b

i A, B. Hàm xác

đị

nh 2 bi

u th

c t

ươ

ng



đươ

ng Similar cho giá tr

True n

ế

u 2 bi

u


th

c t

ươ

ng

đươ

ng, ng

ượ

c l

i cho giá tr


False.



1.41


Hàm Similar



Function Similar(A,B)




B

ướ

c 1 { Ki

m tra lo

i g

c cây}



If TYPE(A)# TYPE(B) then Return(False)


B

ướ

c 2 { Ki

m tra tính t

ươ

ng

đươ

ng }



Case



TYPE(A)=0 : If Value(RPTR(A)) # Value(RPTR(B)) then Return(False)


Else Return(True)



TYPE(A)=1 OR TYPE(A)=3 : { Phép + ho

c * }


Begin



</div>
<span class='text_page_counter'>(22)</span><div class='page_container' data-page=22>

Ngô Công Thắng Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01


BTVN



l

Xây d

ng cây nh

phân bi

u di

n bi

u


th

c sau: a/b - c*d



l

Vi

ế

t gi

mã tính giá tr

c

a bi

u th

c trên.



</div>

<!--links-->

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×