โครงสร้างข้อมูลแบบต้นไม้
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 ระดบ
(ก)
การแทนตนไม ไบนาร ในหนวยความจ ำา ตนไมไบนารสามารถแทนได 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.โพสตออรเดอร
การสร าง Expression Tree
อานสญลกษณจากนพจนทละตว ถาตวทอานมาเปน operand ใหสรางโหนดของ tree หนงโหนดแลว push มนลงใน stack ถาตวทอานมาเปน operator ให pop จาก stack 2 ครง ซงจะได trees T1 และ T2 (T1 นำาออกกอน) แลวใหนำามาสรางเปน tree ใหมทมราก (root) เปนตว operator และม left และ right children เปน T2 และ T1 ตามลำาดบ จากนนใหใส tree ใหมนกลบลง stack
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 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 ครงหลงจงทำาไดงาย
แบบฝกหด1. จากตนไมไบนารทกำาหนด ใหเขยนผลลพธจากการทอง
เขาไปในตนไม แบบ Preorder ,Inorder , Postorder
A
B
C
E
I
F
J
D
G H
K L