โครงสร้างข้อมูลแบบต้นไม้

37
โครงสร้างข้อมูลแบบ ต้นไม้

Transcript of โครงสร้างข้อมูลแบบต้นไม้

โครงสร างข อมลแบบตนไม

นยามของโครงสร างต นไม

โครงสรางขอมลแบบตนไม มคณสมบตดงน 1. มโหนดทเรยกวา รากหรอรต (Root node) , R

2. โหนดทไมใชรตแบงยอยออกเปน n กลม โดยทแตละกลมไมมโหนด

รวมกนเลย เชน กลม T1 , T2 ,…..Tn (n >=0) แตละกลมกเปน

ตนไมเหมอนกน จะเรยกวาตนไมยอย (Subtree)

ลกษณะตนไมแบบร เคอร ซ ฟ

จากรปR เปนรตของตนไมยอย A,B,C,DA เปนรตของตนไมยอย E,F,GF เปนรตของตนไมยอย JB เปนรตของตนไมยอย H และ I

ชอส วนตางๆของตนไม

ระด บของโหนด (Level)

ระดบของโหนดหนง ๆ แสดงถงหนวยระยะทางตามแนวดงของโหนดนนวาอยหางจากรตโหนดเทาไร ถากำาหนดวารตโหนดของตนไมนนอยทระดบ 1 และกงทกกงมความยาวเทากน หมดคอยาว 1 หนวย เลขระดบของโหนดใด ๆ คอจำานวนกงทนอยทสดจากรตโหนดบวกหนงเชน F มเลขระดบเปน 4 เปนตน

ดกร ของโหนด (Level Degree)

ดกรของโหนด คอ จำานวนตนไมยอยของโหนดนน จากรป โหนด X มดกร 1 โหนด A มดกร 2 สวนโหนด H มดกร 3 โหนด B มดกร 1 และโหนด E มดกร 0 เปนตน

โหนดทเป นใบ (Leaf Node)

โหนดทเปนใบ หมายถงโหนดทมดกรเปน 0 เชนโหนด C, D, E, J, F และ G สวนโหนดทมดกรไมเทากบ 0 เรยกวา โหนดภายใน หรอ interior node หรอ branch node

Immediate Successor หรอ SON ของโหนดi

Immediate Successor คอโหนดทงหลายของตนไมยอย i ทมคาระดบตำากวาโหนด i อยหนง เชน SON ของโหนด H คอโหนด E, I, และ F

Immediate Predecessor หรอ father ของ โหนด i

Immediate Predecessor คอโหนดทมคาระดบสงกวาโหนด i อยหนง เชน FATHER ของโหนด J คอโหนด I, FATHER ของโหนด I คอโหนด H เปนตน

ตนไม แบบไบนาร (Binary Tree) ตนไมไบนารเปน rooted binary tree ทวาง

เปลา หรอประกอบดวยรตโหนดและตนไมไบนาร 2 กลมทไมมโหนดรวมกน แตละกลมจะมชอเรยก (โดยตำาแหนงทอยหรอทเขยน) วาตนไมยอยทางซาย (left subtree) และตนไมยอยทางขวา (right subtree) ตามลำาดบคำาวา วางเปลา ในนยามหมายความวา ตนไมไบนารตนนนมแตรตโหนดเพยงโหนดเดยวเทานน

(ก)(ข)

(ค)รป (ก), (ข) และ (ค) เปนตนไมไบนาร

(ง) (จ) (ฉ)

รป (ง), (จ) และ (ฉ)ไมใชตนไมไบนาร

ตนไม ไบนาร แบบสมบรณ(Complete Binary Tree) ตนไมไบนารแบบสมบรณ หมายถงตนไม

ไบนารทแตละโหนดภายในมโหนดยอยซายและขวา (นนคอแตละโหนดภายในม left son และ right son ) และโหนดใบ (leaf nodes) ทงหลายอยในระดบท n รป (ก) เปนตนไมไบนารแบบสมบรณทม 3 ระดบ

(ก)

ตนไมไบนารแบบสมบรณทมโหนดใบอยทระดบ n จะมโหนดทงหมดเทากบ 2n-1

จากรป จำานวนโหนดเทากบ 23-1 = 7 โหนด

การแทนตนไม ไบนาร ในหนวยความจ ำา ตนไมไบนารสามารถแทนได 2 แบบ คอ 1. การแทนโดยอาศยพอยนเตอร

2. การแทนโดยอาศยแอดเดรสของโหนด หรอการแทนแบบ ซเควนเชยล

(sequential)

การแทนโดยอาศยพอยนเตอร

ทำาไดโดยใหแตละโหนดมโครงสรางดงรปตอไปน

DATALLINK RLINK

DATALSON RSON

หรอ

โครงสรางโหนดสำาหรบตนไมไบนาร

LLINK หรอ LSON เปนพอยนเตอรชไปยงตนไมยอยทางซาย สวน RLINK หรอ RSON เปนพอยนเตอรชไปยงตนไมยอยทางขวา

การแทนโดยอาศยแอดเดรสของ โหนด หรอการแทนแบบซเควน

เชยล เปนการแทนตนไมไบนารดวยอารเรย 1 มตอารเรยเดยว การแทนแบบนเหมาะกบโครงสรางตนไมไบนารแบบ complete binary tree ทสด การแทนจะเรมตนดวยการใหหมายเลขแกแตละโหนด ตงแตระดบ 1 ระดบ 2 ...ไปเรอยๆ จนถงระดบ k การใหตวเลขในแตละระดบจะใหจากซายไปขวา โดยใหรตโหนดมหมายเลข 1 เสมอ การใหตวเลขจะตองถอวาตนไมไบนารเปนตนไมไบนารแบบสมบรณ จงจะใหตวเลขทอยแกโหนดได

A

B X

C D

E

2 3

4 5 6 7

8 9 10 11 1213 14 15

1

การใหแอดเดรสแกตนไมไบนารทถกตอเตมใหสมบรณ

B X C D - - E - --A ----1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

รปการแทนตนไมโดยใชอารเรย

การเด นเข าไปในโครงสร างตนไม (TreeTraversal) การนำาตนไมไบนารมาใชประโยชนนน

หมายความวาตองมวธ เดน หรอ traverse เขาไปในตนไมอยางมแบบแผน เพอไป เยยม โหนดตาง ๆโหนดละ 1 ครง คำาวา เยยม หมายถงวาเราจะไปยงโหนดเพอประมวลผลบางอยางทตองการกระทำากบโหนดนน เชน หาขาวสาร ดงนนผลลพธจากการเดนเขาไปในตนไมคอจะไดขาวสารทเกบ (หรอช) โดยโหนดเหลานนออกมาในรปเชงเสน ซงนำาไปใชประโยชนได

ความคดเรมตนของการเดนกคอ เราตองเยยมแตละโหนดพรอมทงตนไมยอยทางซาย และทางขวาของโหนดนน ตามแนวคดนเราจะแยกตนไมไบนารออกเปน 3 สวนคอ R, TL และTR โดยท R จะแทนรตโหนด TL จะแทนตนไมยอยทางซาย และ TR จะแทนตนไมยอยทางขวา จะเหนไดวาจะมวธเดนอย 6 ทางคอ RTL TR, TL RTR, TL TRR, TRTL R, TRRTL และ

RTRTL

มวธเดน 6 วธ จะกลาวเพยง 3 วธแรกเทานน ซง 3 วธแรก มชอเรยก พเศษและลกษณะรายละเอยดการเดนดงน

(1) เดนแบบพรออรเดอร (pre-order traversal) - RTLTR

- เยยม R - เดนเขาไปใน TL (ของ R) อยางพรออรเดอร - เดนเขาไปใน TR (ของ R) อยางพรออรเดอร

(2) เดนแบบอนออรเดอร (in-order traversal) - TLRTR

- เดนเขาไปใน TL (ของ R) อยางอนออรเดอร

- เยยม R - เดนเขาไปใน TR (ของ R) อยางอนออรเด

อร (3) เดนแบบโพสตออรเดอร (post-order traversal) - TLTRR

- เดนเขาไปใน TL (ของ R) อยางโพสตออรเดอร

- เดนเขาไปใน TR (ของ R) อยางโพสตออรเดอร

- เยยม R

A

B C

D

G

E F

H I

พรออรเดอร : ABDGCEHIF (RTLTR)

อนออรเดอร : DGBAHEICF (TL RTR)

โพสตออรเดอร : GDBHIEFCA (TLTR R)

Dot

Amy

Guy

Ron

Kay

Tim

Jim

Ann

Eva

Jon

Kim

Roy Tom

Jan

จงทองเขาไปในตนไม แบบ

1.พรออรเดอร 2.อนออรเดอร 3.โพสตออรเดอร

+

A -

* D

B C

จงทองเขาไปในตนไม แบบ

1.พรออรเดอร 2.อนออรเดอร 3.โพสตออรเดอร

การสร าง Expression Tree

อานสญลกษณจากนพจนทละตว ถาตวทอานมาเปน operand ใหสรางโหนดของ tree หนงโหนดแลว push มนลงใน stack ถาตวทอานมาเปน operator ให pop จาก stack 2 ครง ซงจะได trees T1 และ T2 (T1 นำาออกกอน) แลวใหนำามาสรางเปน tree ใหมทมราก (root) เปนตว operator และม left และ right children เปน T2 และ T1 ตามลำาดบ จากนนใหใส tree ใหมนกลบลง stack

ถาอนพต คอ a b + c d e + * *

Binary Search Trees

การประยกตใช binary trees ทสำาคญอยางหนง คอ การใชในการคนหาคา

คณสมบตของ binary search tree คอ:

1. binary search tree เปน binary tree,

2. ทก ๆ โหนด, X, ใน tree, คาของ keys ทงหมดทาง left subtree จะตองนอยกวาคาของ key คอ X, และคาทงหมดของ keys ทางดาน right subtree ตองมากกวาคาของ key คอ X

เปน Binary Serach Tree ไมเปน Binary Serach Tree

การสร าง Binary Search Tree

สราง binary search จากขอมลตไปน 10 , 5, 1, 100, 20 ,45, 3 ,19

10

5

1

100

20

453 19

การลบโหนดออกจาก Binary Search Tree

เมอพบโหนดทตองการลบออกแลว มประเดนทตองพจารณา ดงน1. ถาโหนดนนเปน leaf กลบออกไดทนท2. ถามลก 1 โหนด, กทำาการปรบ pointer ของ

มนใหขามโหนดทจะลบนนแลวจงทำาการลบ3. ถาโหนดนนมลก 2 โหนด กใหแทนทคาของ

โหนดดวยคาทนอยทสดของ right subtree (หาพบไดงาย) และใหทำาการ delete โหนดนนในแบบ recursive เนองจากโหนดทมคานอยทสดใน right subtree ยอมไมม left child ดงนน การ remove ครงหลงจงทำาไดงาย

กอนและหลง การลบ node (4) ซงม child 1 โหนด

กอนและหลงการลบโหนด (2) ทมลก 2 โหนด

แบบฝกหด1. จากตนไมไบนารทกำาหนด ใหเขยนผลลพธจากการทอง

เขาไปในตนไม แบบ Preorder ,Inorder , Postorder

A

B

C

E

I

F

J

D

G H

K L

2. จงสราง Binary Search Tree จากขอมลดงน 10, 8, 2, 4, 3, 15, 26, 30 ,17, 6

3. จงสราง Expression Tree จากนพจนตอไปน 3.1 (A - 2 * (B + C) – D * E) * F

3.2 A + (B – C) * D ^ ( E * F )

แบบฝกหด (ตอ)