1 / 44

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

โครงสร้างข้อมูลแบบต้นไม้ (Tree). Tree. หมายถึง โครงสร้างข้อมูลที่ออกแบบมาให้มีลักษณะไม่เป็นเชิงเส้น มีการจัดเก็บข้อมูลเชื่อมโยงกันเป็นระดับชั้น โดยเริ่มจากโหนดแรกที่อยู่บนสุดเรียกว่า Root Node เชื่อมโยงไปยังโหนดระดับรองลงไป แต่ละระดับก็มีการเชื่อมโยงโหนดระดับต่อไป ซึ่งเรียกว่า Subtree.

jenski
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. โครงสร้างข้อมูลแบบต้นไม้(Tree)โครงสร้างข้อมูลแบบต้นไม้(Tree)

  2. Tree • หมายถึง โครงสร้างข้อมูลที่ออกแบบมาให้มีลักษณะไม่เป็นเชิงเส้น มีการจัดเก็บข้อมูลเชื่อมโยงกันเป็นระดับชั้น โดยเริ่มจากโหนดแรกที่อยู่บนสุดเรียกว่า Root Node เชื่อมโยงไปยังโหนดระดับรองลงไป แต่ละระดับก็มีการเชื่อมโยงโหนดระดับต่อไป ซึ่งเรียกว่า Subtree

  3. นิยามของโครงสร้างต้นไม้นิยามของโครงสร้างต้นไม้ • โครงสร้างข้อมูลแบบต้นไม้ มีคุณสมบัติดังนี้ 1. มีโหนดที่เรียกว่า รากหรือรูต (Root node) , R 2. โหนดที่ไม่ใช่รูตแบ่งย่อยออกเป็น n กลุ่ม โดยที่แต่ละกลุ่มไม่มีโหนด ร่วมกันเลย เช่น กลุ่ม T1 , T2 ,…..Tn (n >=0) แต่ละกลุ่มก็เป็นต้นไม้เหมือนกัน จะเรียกว่าต้นไม้ย่อย (Subtree)

  4. ลักษณะของทรี จากรูป R เป็นรูทของต้นไม้ย่อย A,B,C,D A เป็นรูทของต้นไม้ย่อย E,F,G F เป็นรูทของต้นไม้ย่อย J B เป็นรูทของต้นไม้ย่อย H และ I

  5. ชื่อส่วนต่างๆของต้นไม้ชื่อส่วนต่างๆของต้นไม้

  6. ระดับของโหนด (Level) • ระดับของโหนดหนึ่ง ๆ แสดงถึงหน่วยระยะทางตามแนวดิ่งของโหนดนั้นว่าอยู่ห่างจากรูตโหนดเท่าไร ถ้ากำหนดว่ารูตโหนดของต้นไม้นั้นอยู่ที่ระดับ 1 และกิ่งทุกกิ่งมีความยาวเท่ากัน หมดคือยาว 1 หน่วย เลขระดับของโหนดใด ๆ คือจำนวนกิ่งที่น้อยที่สุดจากรูตโหนดบวกหนึ่งเช่น F มีเลขระดับเป็น 4 เป็นต้น

  7. ดีกรีของโหนด (Level Degree) • ดีกรีของโหนดคือจำนวนต้นไม้ย่อยของโหนดนั้น จากรูป โหนด X มีดีกรี 1 โหนด A มีดีกรี 2 ส่วนโหนด H มีดีกรี 3 โหนด B มีดีกรี 1 และโหนด E มีดีกรี 0 เป็นต้น

  8. โหนดที่เป็นใบ(Leaf Node) • โหนดที่เป็นใบ หมายถึงโหนดที่มีดีกรีเป็น 0 เช่นโหนด C, D, E, J, F และ G ส่วนโหนดที่มีดีกรีไม่เท่ากับ 0 เรียกว่า โหนดภายใน หรือ interior node หรือ branch node

  9. Immediate Successor หรือ SON ของโหนด i • ImmediateSuccessor คือโหนดทั้งหลายของต้นไม้ย่อย i ที่มีค่าระดับต่ำกว่าโหนด i อยู่หนึ่ง เช่น SON ของโหนด H คือโหนด E, I, และ F

  10. Immediate Predecessor หรือ father ของโหนด i • Immediate Predecessor คือโหนดที่มีค่าระดับสูงกว่าโหนด i อยู่หนึ่ง เช่น FATHER ของโหนด J คือโหนด I, FATHER ของโหนด I คือโหนด H เป็นต้น

  11. โครงสร้างต้นไม้ (Tree Structure) R Root Nodes Nodes X เป็น Immediate Predecessor ของ Y หรือ X เป็น Father (Parent) ของ Y A B X C D H Y Nodes Y เป็น Immediate Successor ของ X หรือ Y เป็น son (Child) ของ X E I G Leaf Nodes

  12. R Root Nodes Level 0 A B X Level 1 C D H Y Level 2 E I G Leaf Nodes Level 3 โครงสร้างต้นไม้ (Tree Structure) Levelแสดงถึงหน่วยระยะทางตามแนวดิ่งของโหนดว่าอยู่ห่างจาก Root Node เป็นระยะเท่าไรและทุกกิ่งมีความยาวเท่ากันคือ 1 หน่วย

  13. R Root Nodes Level 0 A B X Level 1 C D H Y Level 2 E I G Leaf Nodes Level 3 โครงสร้างต้นไม้ (Tree Structure) Degreeแสดงถึงจำนวนของ Subtree ของโหนดนั้น เช่น A มี Degree 2, X มี Degree 1

  14. R Root Nodes Level 0 A B X Level 1 C D H Y Level 2 E I G Leaf Nodes Level 3 โครงสร้างต้นไม้ (Tree Structure) Leaf Nodeแสดงถึงโหนดที่มี Degree = 0 เช่น C, D, E, I ,G ส่วนโหนด ที่มี Degree <> 0 เรียกว่า Branch Node หรือ Interior Node

  15. R A B X C D H Y E I G โครงสร้างต้นไม้ (Tree Structure) Nodes X เป็น Immediate Predecessor ของ Y หรือ X เป็น Father (Parent) ของ Y Nodes Y เป็น Immediate Successor ของ X หรือ Y เป็น son (Child) ของ X Predecessor หมายถึง ตัว Node ที่อยู่ก่อนหน้า Successor หมายถึง ตัว Node ที่มาที่หลัง เช่น R, B, H เป็น Predecessor ของ E, I, I เป็น Successor ของ H

  16. ต้นไม้แบบไบนารี (Binary Tree) • ต้นไม้ไบนารีเป็น rooted binary tree ที่ว่างเปล่า หรือประกอบด้วยรูตโหนดและต้นไม้ไบนารี 2 กลุ่มที่ไม่มีโหนดร่วมกัน แต่ละกลุ่มจะมีชื่อเรียก (โดยตำแหน่งที่อยู่หรือที่เขียน) ว่าต้นไม้ย่อยทางซ้าย (left subtree) และต้นไม้ย่อยทางขวา (right subtree) ตามลำดับคำว่า ว่างเปล่า ในนิยามหมายความว่า ต้นไม้ไบนารีต้นนั้นมีแต่รูตโหนดเพียงโหนดเดียวเท่านั้น

  17. A C S V B C G F D D E F G (ข) X (ก) (ค) รูป (ก), (ข) และ (ค) เป็นต้นไม้ไบนารี

  18. (ง) (ฉ) (จ) รูป (ง), (จ) และ (ฉ)ไม่ใช่ต้นไม้ไบนารี

  19. ต้นไม้ไบนารีแบบสมบูรณ์ (Complete Binary Tree) • ต้นไม้ไบนารีแบบสมบูรณ์ หมายถึงต้นไม้ไบนารีที่แต่ละโหนดภายในมีโหนดย่อยซ้ายและขวา (นั่นคือแต่ละโหนดภายในมี left son และ right son ) และโหนดใบ (leaf nodes) ทั้งหลายอยู่ในระดับที่ n รูป (ก) เป็นต้นไม้ไบนารีแบบสมบูรณ์ที่มี 3 ระดับ D R K M W O U (ก)

  20. ต้นไม้ไบนารีแบบสมบูรณ์ที่มีโหนดใบอยู่ที่ระดับ n จะมีโหนดทั้งหมดเท่ากับ 2n-1 W V D N S A Q จากรูป จำนวนโหนดเท่ากับ 23-1 = 7โหนด

  21. การแทนต้นไม้ไบนารีในหน่วยความจำการแทนต้นไม้ไบนารีในหน่วยความจำ • ต้นไม้ไบนารีสามารถแทนได้ 2 แบบ คือ 1. การแทนโดยอาศัยพอยน์เตอร์ 2. การแทนโดยอาศัยแอดเดรสของโหนด หรือการแทนแบบ ซีเควนเชียล (sequential)

  22. การแทนโดยอาศัยพอยน์เตอร์การแทนโดยอาศัยพอยน์เตอร์ • ทำได้โดยให้แต่ละโหนดมีโครงสร้างดังรูปต่อไปนี้ DATA DATA หรือ LLINK RLINK LSON RSON โครงสร้างโหนดสำหรับต้นไม้ไบนารี LLINK หรือ LSON เป็นพอยน์เตอร์ชี้ไปยังต้นไม้ย่อยทางซ้าย ส่วน RLINK หรือ RSON เป็นพอยน์เตอร์ชี้ไปยังต้นไม้ย่อยทางขวา

  23. การแทนโดยอาศัยแอดเดรสของโหนด หรือการแทนแบบซีเควนเชียล • เป็นการแทนต้นไม้ไบนารีด้วยอาร์เรย์ 1 มิติอาร์เรย์เดียว การแทนแบบนี้เหมาะกับโครงสร้างต้นไม้ไบนารีแบบ complete binary tree ที่สุด การแทนจะเริ่มต้นด้วยการให้หมายเลขแก่แต่ละโหนด ตั้งแต่ระดับ 1 ระดับ 2 ...ไปเรื่อยๆ จนถึงระดับ k การให้ตัวเลขในแต่ละระดับจะให้จากซ้ายไปขวา โดยให้รูตโหนดมีหมายเลข 1 เสมอ การให้ตัวเลขจะต้องถือว่าต้นไม้ไบนารีเป็นต้นไม้ไบนารีแบบสมบูรณ์ จึงจะให้ตัวเลขที่อยู่แก่โหนดได้

  24. 1 A 3 2 B X 4 6 7 5 C D 13 11 8 14 15 9 10 12 E การให้แอดเดรสแก่ต้นไม้ไบนารีที่ถูกต่อเติมให้สมบูรณ์ 2 4 5 7 8 9 10 11 12 13 14 15 1 3 6 A B X C D - - E - - - - - - - รูปการแทนต้นไม้โดยใช้อาร์เรย์ ถ้าพิจาณาโหนดใดๆ เป็นตำแหน่ง x โหนดลูกทางซ้ายจะมีดัชนี 2x ส่วนโหนดลูกทางขวาจะมีดัชนี 2x+1

  25. การเปลี่ยน Tree ให้เป็น Binary Tree • ต้นไม้แบบออดินารี(ordinary)คือต้นไม้ที่มีดีกรีสูงสุดของแต่ละโหนดเป็นเท่าไรก็ได้ ซึ่งการเปลี่ยนให้เป็น binary tree เป็นการจัดให้แต่ละโหนดมีดีกรีสูงสุดเท่ากับสอง มีขั้นตอนดังนี้ • 1. พิจารณาที่กิ่งทางซ้ายสุดที่อยู่ใต้พ่อเดียวกัน • 2. ต่อกิ่งของโหนดทางซ้ายสุดในขั้นที่ 1 ไปทางขวาตามลำดับอาวุโสกับพี่น้องที่เกิดจากพ่อเดียวกัน • 3. ทำขั้นที่ 1 และ 2 จนครบทุกโหนด • 4. ปรับมุมของแต่ละกิ่ง ประมาณ 45 องศา

  26. การเปลี่ยน Tree ให้เป็น Binary Tree ขั้นที่ 1 ขั้นที่ 4 ขั้นที่ 2 ขั้นที่ 3

  27. การเปลี่ยน Tree ให้เป็น Binary Tree A ตัวอย่าง แสดงการเปลี่ยนต้นไม้ให้เป็นแบบทวิภาค โจทย์ A B F B F C K D G J C K D G J E H L I E H A L I B F ขั้นที่ 1-3 C G D J K ผลลัพธ์ E L H I

  28. การท่องต้นไม้ (Tree Traversal) Tree Traversalหมายถึงการไปยังโหนดเพื่อประมวลผลบางอย่างที่ต้องการกระทำกับโหนดนั้น เช่น หาข่าวสาร แบ่งออกเป็น 3 วิธี (ที่นิยมใช้) 1. Pre-Order Traversal (RTLTR) 2. In-Order Traversal (TLRTR) 3. Post-Order Traversal (TLTRR)

  29. การท่องผ่าน Binary Tree การท่องผ่านโหนด หมายถึง การเข้าไปในโครงสร้างต้นไม้เพื่อนำข้อมูลในโหนดมาแสดงหรือเพื่อการค้นหา หรือการประมวลผล การเดินเยี่ยมโหนดมี 3 วิธี 1. Inorder traversal หรือ Symmetric order จะทำการเยี่ยมโหนดในต้นไม้ย่อยทางซ้ายแบบอินออเดอร์ ก่อนเยี่ยมโหนดรากและเยี่ยมโหนดในต้นไม้ย่อยทางขวาแบบอินออเดอร์(Left/ Root/Right) 2. Preorder traversal จะทำการเยี่ยมโหนดรากก่อน เยี่ยมโหนดในต้นไม้ย่อยทางซ้ายแบบพรีออเดอร์ และเยี่ยมโหนดในต้นไม้ย่อยทางขวาแบบพรีออเดอร์(Root/ Left/ Right) 3. Postorder traversal หรือ Endorder จะทำการเยี่ยมโหนดในต้นไม้ย่อยทางซ้ายแบบ โพสออเดอร์ ก่อนเยี่ยมโหนดในต้นไม้ย่อยทางขวาแบบ โพสออเดอร์ และเยี่ยมโหนดราก(Left/ Right/ Root)

  30. การท่องผ่าน Binary Tree A 1. แบบอินออเดอร์(Left/ Root/Right) จากภาพจะได้ BAC 2. แบบพรีออเดอร์(Root/ Left/ Right)จากภาพจะได้ ABC 3. แบบโพสออเดอร์(Left/ Right/ Root)จากภาพจะได้ BCA 1. แบบอินออเดอร์(Left/ Root/Right)จากภาพจะได้ DB A EG C HFI 2. แบบพรีออเดอร์(Root/ Left/ Right) จากภาพจะได้ A BD CEG FHI 3. แบบโพสออเดอร์(Left/ Right/ Root)จากภาพจะได้ DB GE HIF C A B C A B C D E F G H I

  31. R A X C D G การท่องต้นไม้ไบนารี (Binary Tree Traversal) start stop แบบ Pre-Order Traversal Y Result R A C D X Y G

  32. R A X C D G การท่องต้นไม้ไบนารี (Binary Tree Traversal) start stop แบบ In-Order Traversal Y Result C A D R G Y X

  33. R A X C D G การท่องต้นไม้ไบนารี (Binary Tree Traversal) start stop แบบ Post-Order Traversal Y Result C D A G Y X R

  34. A B C D E F G H I Pre-order : ABDGCEHIF In-order : DGBAHEICF Post- order :GDBHIEFCA

  35. EX1 + - A * D B C จงท่องเข้าไปในต้นไม้ แบบ 1.Pre-order2.In-order 3.Post-order

  36. Expression Tree เป็นต้นไม้แบบไบนารีที่ โหนดใบคือoperands, เช่นค่าคงที่หรือตัวแปร, และโหนดรากคือoperators จากรูปแสดง Expression tree ของ (a + b * c) + ((d * e + f ) * g)

  37. Expression Tree คือต้นไม้ที่สร้างขึ้นจากตัวกระทำ(operand) และเครื่องหมาย(operators) ทางคณิตศาสตร์ของนิพจน์ โดยการวางตัวกระทำที่โหนดใบ(leavenode) และวางเครื่องหมายไว้ที่โหนดภายใน สำหรับเครื่องหมายที่เป็นเครื่องหมายเดี่ยว(unary operator)จะมีกิ่งต้นไม้ย่อยเพียงข้างเดียว เรามักจะวาง เครื่องหมายเดี่ยวไว้ทางซ้ายของตัวกระทำ ซึ่งเครื่องหมายที่จัดเป็นเครื่องหมายเดี่ยว ได้แก่ - log() cos() และมีเครื่องหมายเดี่ยว ที่ถูกจัดวางไว้ทางขวาของตัวกระทำ ได้แก่ แฟกทอเรียลฟังก์ชันเลขยกกำลังต่างๆ ตัวอย่าง แสดงการสร้าง เอ็กเพรสชันทรีแบบทวิภาค จากนิพจน์X * Y + Z + * Z X Y

  38. Expression Tree • ตัวอย่างแสดงการสร้างเอ็กเพรสชันทรีจากนิพจน์ (X – ((Y / R) * D)) • จะได้ว่า • การเยี่ยมโหนด แบบอินออเดอร์จะได้ X-Y/R*D ซึ่งอยู่ในรูปอินฟิกฟอร์ม • การเยี่ยมโหนด แบบพรีออเดอร์จะได้ -X*/YRD ซึ่งอยู่ในรูปพรีฟิกฟอร์ม • การเยี่ยมโหนด แบบโพสออเดอร์ จะได้ XYR/D*- ซึ่งอยู่ในรูปโพสฟิกฟอร์ม - X * / D Y R

  39. การสร้าง Expression Tree • อ่านสัญลักษณ์จากนิพจน์ที่ละตัวถ้าตัวที่อ่านมาเป็น operand ให้สร้างโหนดของ tree หนึ่งโหนดแล้ว push มันลงใน stack ถ้าตัวที่อ่านมาเป็น operator ให้ pop จาก stack 2 ครั้ง ซึ่งจะได้ trees T1และT2 (T1นำออกก่อน) แล้วให้นำมาสร้างเป็น tree ใหม่ที่มีราก (root) เป็นตัว operator และมี left และ right children เป็นT2และT1ตามลำดับจากนั้นให้ใส่ tree ใหม่นี้กลับลง stack

  40. 1 • ถ้าอินพุต คือ a b + c d e + * * 2 3

  41. ถ้าอินพุต คือ a b + c d e + * * 4 5

  42. ถ้าอินพุต คือ a b + c d e + * * 6 7

  43. แบบฝึกหัด 1. จากต้นไม้ไบนารีที่กำหนด ให้เขียนผลลัพธ์จากการท่องเข้าไปในต้นไม้ แบบPreorder ,Inorder , Postorder A H B J F G I D K M 2. จงสร้าง Expression Treeจากนิพจน์ต่อไปนี้ 2.1(A - 2 * (B + C) – D * E) * F 2.2 A + (B – C) * D ^ ( E * F )

  44. แบบฝึกหัด • 3. จงแปลงทรีให้เป็นไบนารีทรี A H B C J F G I D E K M

More Related