trees adt
DESCRIPTION
Trees ADT. การเข้าถึงข้อมูลที่มีโครงสร้างแบบ Linked List ซึ่งความสัมพันธ์ระหว่างข้อมูลแต่ละตัวเป็นแบบก่อน (Before) และหลัง (After) Linked List ให้ Running Time เป็นแบบ Linear, O(N) เมื่อจำนวน Input (N) มากๆ Running Time อาจจะมากเกินควร - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Trees ADT](https://reader036.vdocument.in/reader036/viewer/2022081421/56813115550346895d976761/html5/thumbnails/1.jpg)
25 2006 1June AA200 1Week 09 - Tree ADT
TreesTrees ADTADT
การเข้�าถึงข้�อมู�ลที่��มู�โครงสร�างแบบ การเข้�าถึงข้�อมู�ลที่��มู�โครงสร�างแบบ Linked List Linked List ซึ่�งซึ่�งความูส�มูพั�นธ์�ระหว!างข้�อมู�ลแต่!ละต่�วเป็$นแบบก!อน ความูส�มูพั�นธ์�ระหว!างข้�อมู�ลแต่!ละต่�วเป็$นแบบก!อน (Before) (Before) และหล�ง และหล�ง (After) (After)
Linked List Linked List ให� ให� Running Time Running Time เป็$นแบบ เป็$นแบบ Linear, O(N) Linear, O(N)
เมู&�อจำ(านวน เมู&�อจำ(านวน Input (N) Input (N) มูากๆ มูากๆ Running Time Running Time อาจำจำะอาจำจำะมูากเก*นควรมูากเก*นควร
โครงสร�างข้�อมู�ลแบบต่�นไมู� หร&อ โครงสร�างข้�อมู�ลแบบต่�นไมู� หร&อ Trees Trees ซึ่�งเป็$นโครงสร�างซึ่�งเป็$นโครงสร�างข้�อมู�ลแบบง!ายที่��ให� ข้�อมู�ลแบบง!ายที่��ให� Running Time Running Time เป็$น เป็$น O(log N)O(log N) โดยเฉล��ย ซึ่�งเป็$นการที่(างานที่��ใช้�เวลาน�อยกว!ามูาก โดยเฉล��ย ซึ่�งเป็$นการที่(างานที่��ใช้�เวลาน�อยกว!ามูาก
![Page 2: Trees ADT](https://reader036.vdocument.in/reader036/viewer/2022081421/56813115550346895d976761/html5/thumbnails/2.jpg)
25 2006 1June AA200 2Week 09 - Tree ADT
โครงสร�างข้อง โครงสร�างข้อง Trees ADTTrees ADT Tree Tree เป็$น เป็$น Abstract Data Type Abstract Data Type ที่��ที่�� เก0บสมูาช้*กเป็$นเก0บสมูาช้*กเป็$น
แบบล(าด�บช้�1นแบบล(าด�บช้�1น (Hierarchical) (Hierarchical) ความูส�มูพั�นธ์�ระหว!างข้�อมู�ลแต่!ละต่�วในโครงสร�างข้�อมู�ลแบบ ความูส�มูพั�นธ์�ระหว!างข้�อมู�ลแต่!ละต่�วในโครงสร�างข้�อมู�ลแบบ
Trees Trees จำะเป็$นแบบล(าด�บข้�1น ซึ่�งสมูาช้*กบางต่�วอย�!เหน&อ จำะเป็$นแบบล(าด�บข้�1น ซึ่�งสมูาช้*กบางต่�วอย�!เหน&อ (a(a bove) bove) สมูาช้*กอ&�น และสมูาช้*กบางต่�วอย�!ใต่� สมูาช้*กอ&�น และสมูาช้*กบางต่�วอย�!ใต่� (below) (below)
สมูาช้*กอ&�น สมูาช้*กอ&�น ที่(างานแบบ ที่(างานแบบ nonlinear nonlinear ซึ่�งเป็$นว*ธ์�การที่��ที่(าให�เราสามูารถึซึ่�งเป็$นว*ธ์�การที่��ที่(าให�เราสามูารถึ
สร�าง สร�าง Algorithm Algorithm ที่��ที่(างานได�เร0วข้1นมูาก ที่��ที่(างานได�เร0วข้1นมูาก ยกเว�นแต่!สมูาช้*กที่��อย�!บนส2ด ยกเว�นแต่!สมูาช้*กที่��อย�!บนส2ด (Top Element) (Top Element) สมูาช้*กสมูาช้*ก
ต่�วอ&�นๆแต่!ละต่�วจำะมู�สมูาช้*กแมู! ต่�วอ&�นๆแต่!ละต่�วจำะมู�สมูาช้*กแมู! ((ParentParent ) ) และสมูาช้*กล�ก และสมูาช้*กล�ก ((ChildChild ) 0 ) 0 ต่�วหร&อมูากกว!าต่�วหร&อมูากกว!า
สมูาช้*กต่�วบนส2ด สมูาช้*กต่�วบนส2ด (Top Element)(Top Element) ว!า ว!า RootRoot ข้อง ข้อง TreeTree
![Page 3: Trees ADT](https://reader036.vdocument.in/reader036/viewer/2022081421/56813115550346895d976761/html5/thumbnails/3.jpg)
25 2006June 1200. AM 3Week 09 - Tree ADT
ต่�วอย!างการป็ระย2กต่�ใช้�งาน ต่�วอย!างการป็ระย2กต่�ใช้�งาน TreeTree
ใช้� ใช้� Trees Trees ในการที่(างานต่!อไป็น�1 ในการที่(างานต่!อไป็น�1 ใช้�ในการสร�างระบบไฟล� ใช้�ในการสร�างระบบไฟล� (File System) (File System) ใน ใน Operating Operating
SystemSystem ใช้�ในการป็ระเมู*นน*พัจำน�ที่างคณิ*ต่ศาสต่ร� ใช้�ในการป็ระเมู*นน*พัจำน�ที่างคณิ*ต่ศาสต่ร� (Arithmetic (Arithmetic
Expressions)Expressions) ใช้�ช้!วยในการหาข้�อมู�ล ใช้�ช้!วยในการหาข้�อมู�ล (Search) (Search) เพั&�อให�ได�เวลาโดยเฉล��ยในเพั&�อให�ได�เวลาโดยเฉล��ยใน
การหาข้�อมู�ล การหาข้�อมู�ล (Search) (Search) เป็$น เป็$น O(log N) O(log N) และป็ร�บป็ร2งว*ธ์�การและป็ร�บป็ร2งว*ธ์�การหาข้�อมู�ล หาข้�อมู�ล (Search) (Search) เพั&�อให�ได�กรณิ�ที่��เลวร�ายที่��ส�ด เพั&�อให�ได�กรณิ�ที่��เลวร�ายที่��ส�ด -(Worst-(Worst
Case) Case) ในการหาข้�อมู�ล ในการหาข้�อมู�ล (Search) (Search) ใช้�เวลาไมู!เก*น ใช้�เวลาไมู!เก*น O(log N O(log N))
![Page 4: Trees ADT](https://reader036.vdocument.in/reader036/viewer/2022081421/56813115550346895d976761/html5/thumbnails/4.jpg)
25 2006June 1200. AM 4Week 09 - Tree ADT
ค2ณิสมูบ�ต่*พั&1นฐานข้อง ค2ณิสมูบ�ต่*พั&1นฐานข้อง TreesTrees จำากน*ยามูแบบร�เคอร�ซึ่�พั จำากน*ยามูแบบร�เคอร�ซึ่�พั Tree Tree เป็$นช้2ด เป็$นช้2ด (Collection) (Collection) ข้อง ข้อง
Nodes Nodes ซึ่�งอาจำเป็$นศ�นย� ซึ่�งอาจำเป็$นศ�นย� (Empty)(Empty) Tree Tree ป็ระกอบด�วย ป็ระกอบด�วย Node Node หล�ก หล�ก Node Node rr เร�ยกว!า เร�ยกว!า RootRoot หร&อรากหร&อราก
ข้องต่�นไมู� และมู� ต่�นไมู�ย!อยหร&อ ข้องต่�นไมู� และมู� ต่�นไมู�ย!อยหร&อ SuSu btrees T1, T2, …, Tk btrees T1, T2, …, Tk AAAAAAA AAAAAAA แต่!ละอ�นจำะถึ�กเช้&�อมูต่!อด�วย แต่!ละอ�นจำะถึ�กเช้&�อมูต่!อด�วย AAAA AAAA โดยต่รงจำาก โดยต่รงจำาก Node Node AA Root Root ข้องแต่!ละ ข้องแต่!ละ Subtree Subtree ถึ&อว!าเป็$น ถึ&อว!าเป็$น Child Child ข้อง ข้อง r r และเร�ยกได�ว!า และเร�ยกได�ว!า
r r เป็$น เป็$น Parent Parent ข้อง ข้อง Subtree Subtree แต่!ละต่�ว แต่!ละต่�ว
EdgeEdge
SubtreeSubtree
![Page 5: Trees ADT](https://reader036.vdocument.in/reader036/viewer/2022081421/56813115550346895d976761/html5/thumbnails/5.jpg)
25 2006June 1200. AM 5Week 09 - Tree ADT
Tree Tree เป็$นช้2ด เป็$นช้2ด ((CollectionCollection)) ข้อง ข้อง Node Node จำ(านวน จำ(านวน N N nodes nodes
มู�ก*�งหร&อ มู�ก*�งหร&อ Edges Edges ที่�1งหมูด ที่�1งหมูด N – 1 N – 1 ก*�ง โดยแต่!ละก*�งที่(าก*�ง โดยแต่!ละก*�งที่(าหน�าที่��เช้&�อมู หน�าที่��เช้&�อมู Nodes Nodes เข้�าก�บ เข้�าก�บ Parent Parent ข้องมู�นข้องมู�น
ที่2ก ที่2ก Node Node ยกเว�น ยกเว�น Root Root จำะ จำะ Parent 1 Parent 1 ต่�ว ยกเว�น ต่�ว ยกเว�น Root Root ซึ่�งไมู!มู� ซึ่�งไมู!มู� ParentParent
จำากร�ป็ จำากร�ป็ Node A Node A เป็$น เป็$น Root Root ข้อง ข้อง Tree Tree น�1 น�1
![Page 6: Trees ADT](https://reader036.vdocument.in/reader036/viewer/2022081421/56813115550346895d976761/html5/thumbnails/6.jpg)
25 2006June 1200. AM 6Week 09 - Tree ADT
แต่!ละ แต่!ละ Node Node มู� มู� ChildChild จำ(านวนหน�ง ซึ่�งอาจำเป็$น จำ(านวนหน�ง ซึ่�งอาจำเป็$น 00 Node Node ที่��ไมู!มู� ที่��ไมู!มู� Children Children เร�ยกว!า เร�ยกว!า LeaveLeave หร&อใบหร&อใบ
ข้องต่�นไมู�ข้องต่�นไมู� Node Node ที่��มู� ที่��มู� Parent Parent เด�ยวก�นเร�ยกว!าเป็$น เด�ยวก�นเร�ยกว!าเป็$น
SiblingsSiblings ( (พั��น�องพั��น�อง ) ) ก�น ก�น
![Page 7: Trees ADT](https://reader036.vdocument.in/reader036/viewer/2022081421/56813115550346895d976761/html5/thumbnails/7.jpg)
25 2006June 1200. AM 7Week 09 - Tree ADT
PathPath หมูายถึงเส�นที่าง เช้!นจำาก หมูายถึงเส�นที่าง เช้!นจำาก node n node n11
ไป็ย�ง ไป็ย�ง nnkk โดยที่�� โดยที่�� nnii เป็$น เป็$น parent parent ข้อง ข้อง nni+1i+1 ส(าหร�บ ส(าหร�บ 1≤ i < k 1≤ i < k
LengthLength หมูายถึงระยะที่างข้อง หมูายถึงระยะที่างข้อง Path Path น�1ซึ่�งก0ค&อน�1ซึ่�งก0ค&อจำ(านวนก*�ง จำ(านวนก*�ง ((EdgeEdge)) บน บน path path ค*ดเป็$น ค*ดเป็$น 1k – 1k –
ส�งเกต่ได�ว!า ใน ส�งเกต่ได�ว!า ใน Tree Tree หน�งๆ จำะมู� หน�งๆ จำะมู� path 1 path path 1 path จำาจำาก ก Root Root
![Page 8: Trees ADT](https://reader036.vdocument.in/reader036/viewer/2022081421/56813115550346895d976761/html5/thumbnails/8.jpg)
25 2006June 1200. AM 8Week 09 - Tree ADT
DepthDepth ข้อง ข้อง nnii หมูายถึง หมูายถึง Length Length ข้อง ข้อง path path เฉพัาะเฉพัาะจำาก จำาก Root Root มูาถึง มูาถึง nnii ด�งน�1นถึ&อได�ว!า ด�งน�1นถึ&อได�ว!า Depth Depth ข้อง ข้อง RooRoo
t t เป็$น เป็$น 00 HeightHeight ข้อง ข้อง nnii หมูายถึง หมูายถึง Length Length ข้อง ข้อง path path ที่��ที่��
ยาวที่��ส2ดจำาก ยาวที่��ส2ดจำาก nnii ไป็ย�ง ไป็ย�ง Leave Leave ข้อง ข้อง Tree Tree ด�งน�1นถึ&อได�ด�งน�1นถึ&อได�ว!า ว!า Leave Leave ที่2กต่�วอย�!ที่�� ที่2กต่�วอย�!ที่�� Height Height ที่�� ที่�� 00
![Page 9: Trees ADT](https://reader036.vdocument.in/reader036/viewer/2022081421/56813115550346895d976761/html5/thumbnails/9.jpg)
25 2006June 1200. AM 9Week 09 - Tree ADT
Height Height ข้อง ข้อง Tree Tree เที่!าก�บค!า เที่!าก�บค!า height height ข้อง ข้อง RootRoot Depth Depth ข้อง ข้อง Tree Tree เที่!าก�บค!า เที่!าก�บค!า depth depth ข้อง ข้อง leave leave ที่��ที่��
อย�!ลกที่��ส2ด ซึ่�งจำะมู�ค!าเที่!าก�บ อย�!ลกที่��ส2ด ซึ่�งจำะมู�ค!าเที่!าก�บ Height Height ข้อง ข้อง Tree Treeเสมูอเสมูอ
ถึ�ามู� ถึ�ามู� Path Path จำาก จำาก nn11
ไป็ย�ง ไป็ย�ง nn22
แสดงว!า แสดงว!า nn11
เป็$น เป็$น AncestorAncestor ((บรรพับ2ร2ษบรรพับ2ร2ษ))ข้อง ข้อง nn22
nn22
เป็$น เป็$น DescendantDescendant ((ล�กหลานล�กหลาน ) ) ข้อง ข้อง nn11
![Page 10: Trees ADT](https://reader036.vdocument.in/reader036/viewer/2022081421/56813115550346895d976761/html5/thumbnails/10.jpg)
25 2006June 1200. AM 10Week 09 - Tree ADT
การสร�างโครงสร�างข้�อมู�ลแบบการสร�างโครงสร�างข้�อมู�ลแบบTreeTree
ว*ธ์�การหน�งในการสร�าง ว*ธ์�การหน�งในการสร�าง Trees Trees ค&อการสร�าง ค&อการสร�าง Node Nodeโดยแต่!ละโดยแต่!ละ Node Node มู�องค�ป็ระกอบต่!อไป็น�1มู�องค�ป็ระกอบต่!อไป็น�1
ข้�อมู�ลข้�อมู�ล Pointer Pointer ไป็ย�ง ไป็ย�ง ChildChild ข้อง ข้อง Node Node น�1นๆ น�1นๆ
เน&�องจำากไมู!มู�การก(าหนดจำ(านวน เน&�องจำากไมู!มู�การก(าหนดจำ(านวน Child Child ข้องแต่!ละ ข้องแต่!ละ Node Node ไว�ล!วงหน�า การสร�าง ไว�ล!วงหน�า การสร�าง Pointer Pointer เพั&�อเช้&�อมูเพั&�อเช้&�อมูไป็ย�ง ไป็ย�ง Child Child แต่!ละต่�วโดยต่รงจำะที่(าให�เส�ยเน&1อที่��มูาก แต่!ละต่�วโดยต่รงจำะที่(าให�เส�ยเน&1อที่��มูาก ที่างออกอย!างง!ายๆค&อการที่างออกอย!างง!ายๆค&อการเก0บ เก0บ Child Child ข้องแต่!ละ ข้องแต่!ละ Node Node ไว�ใน ไว�ใน Linked ListLinked List ที่��เก0บโหนดต่!างๆข้องที่��เก0บโหนดต่!างๆข้องต่�นไมู� ต่�นไมู�
![Page 11: Trees ADT](https://reader036.vdocument.in/reader036/viewer/2022081421/56813115550346895d976761/html5/thumbnails/11.jpg)
25 2006June 1200. AM 11Week 09 - Tree ADT
struct struct TreeNodeTreeNode{{
string element ; string element ; TreeNode* firstChild ; TreeNode* firstChild ;
TreeNode* TreeNode* nextSibling ; nextSibling ;
}}
firstChild firstChild ค&อ ค&อ Pointer Pointer ที่��ช้�1ลงด�านล!างที่��ช้�1ลงด�านล!าง nextSibling nextSibling ค&อค&อ Pointer Pointer ที่��ช้�1จำากซึ่�ายไป็ข้วาที่��ช้�1จำากซึ่�ายไป็ข้วา NULL Pointer NULL Pointer จำะไมู!ได�วาดเอาไว�เน&�องจำากมู�เป็$นจำ(านวนมูากจำะไมู!ได�วาดเอาไว�เน&�องจำากมู�เป็$นจำ(านวนมูาก
elementnextSibling
firstChild
![Page 12: Trees ADT](https://reader036.vdocument.in/reader036/viewer/2022081421/56813115550346895d976761/html5/thumbnails/12.jpg)
25 2006June 1200. AM 12Week 09 - Tree ADT
การเด*นที่างใน การเด*นที่างใน Tree (Tree Tree (Tree Traversal)Traversal)
TraversalTraversal ส(าหร�บ ส(าหร�บ Tree Tree ค&อระบบว*ธ์�ในการเข้�าถึง ค&อระบบว*ธ์�ในการเข้�าถึง (access/ visit) (access/ visit) สมูาช้*ก สมูาช้*ก Nodes Nodes ที่�1งหมูดที่��มู�อย�!ใน ที่�1งหมูดที่��มู�อย�!ใน TreeTree
พั*จำารณิา พั*จำารณิา Tree Tree ที่��เป็$นโครงสร�างไดเร0กที่อร�ข้อง ที่��เป็$นโครงสร�างไดเร0กที่อร�ข้อง Operating System Operating System ที่��วไป็ เช้!นโครงสร�างระบบไฟล�ใน ที่��วไป็ เช้!นโครงสร�างระบบไฟล�ใน UNIX UNIX
![Page 13: Trees ADT](https://reader036.vdocument.in/reader036/viewer/2022081421/56813115550346895d976761/html5/thumbnails/13.jpg)
25 2006June 1200. AM 13Week 09 - Tree ADT
Root Directory Root Directory ข้องค&อ ข้องค&อ Node Node //usrusr /usr/usr มู� มู� Children Children ที่�1งหมูด ที่�1งหมูด 3 3 ต่�ว ได�แก! ต่�ว ได�แก! markmark , ,
alexalex และ และ billbill ซึ่�งล�วนเป็$น ซึ่�งล�วนเป็$น Directory Directory เช้!นเด�ยวก�น เช้!นเด�ยวก�น ด�งน�1น เร�ยกได�ว!า ด�งน�1น เร�ยกได�ว!า /usr /usr ป็ระกอบด�วย ป็ระกอบด�วย directories 3 directories 3อ�นแต่!ไมู!มู� อ�นแต่!ไมู!มู� filefile
File File ที่��ช้&�อว!า ที่��ช้&�อว!า /usr/mark/book/ch1.r/usr/mark/book/ch1.r ได�มูาจำากได�มูาจำากการไล!ไป็ต่ามู การไล!ไป็ต่ามู child child ต่�วซึ่�ายส2ด ต่�วซึ่�ายส2ด 3 3 คร�1งคร�1ง
![Page 14: Trees ADT](https://reader036.vdocument.in/reader036/viewer/2022081421/56813115550346895d976761/html5/thumbnails/14.jpg)
25 2006June 1200. AM 14Week 09 - Tree ADT
พั*จำารณิา พั*จำารณิา 1/usr/mark/book/ch .r1/usr/mark/book/ch .r เคร&�องหมูาย เคร&�องหมูาย / / แต่!ละแต่!ละอ�นหล�งจำากอ�นแรก แสดง อ�นหล�งจำากอ�นแรก แสดง Edge Edge แต่!ละก*�ง ผลล�พัธ์�ที่��ได�ค&อแต่!ละก*�ง ผลล�พัธ์�ที่��ได�ค&อช้&�อเต่0มูข้อง ช้&�อเต่0มูข้อง pathnamepathname
ระบบไฟล�แบบล(าด�บข้�1น ระบบไฟล�แบบล(าด�บข้�1น AAAAAAA( ) AAAAAAA( ) File File ใน ใน directory directory ต่!างก�นสามูารถึมู�ช้&�อซึ่(1าก�นได� ต่!างก�นสามูารถึมู�ช้&�อซึ่(1าก�นได�
เน&�องจำากมู� เน&�องจำากมู� path path จำาก จำาก root root ต่!างก�นซึ่�งที่(าให�มู� ต่!างก�นซึ่�งที่(าให�มู� pathname pathname ที่��ต่!างก�นไป็ ที่��ต่!างก�นไป็
![Page 15: Trees ADT](https://reader036.vdocument.in/reader036/viewer/2022081421/56813115550346895d976761/html5/thumbnails/15.jpg)
25 2006June 1200. AM 15Week 09 - Tree ADT
Directory ListingDirectory Listing แสดงรายช้&�อข้อง แสดงรายช้&�อข้อง Files Files ที่�1งหมูดใน ที่�1งหมูดใน directory directory ออกมูา ออกมูา File File ที่��มู� ที่��มู� Depth dDepth dii จำะถึ�กแที่0บจำะถึ�กแที่0บ (Tab) (Tab) ย!อหน�า ย!อหน�า
(indent)(indent) เข้�าไป็ เข้�าไป็ ddii แที่0บ แที่0บ ListDir (DirectoryOrFile D, int Depth)ListDir (DirectoryOrFile D, int Depth){{
PrintName(D, Depth);PrintName(D, Depth);if(D is a directory)if(D is a directory) for each child, C, of Dfor each child, C, of D ListDir(C, Depth+1);ListDir(C, Depth+1);
}}main()main(){{
……ListDir(D, 0);ListDir(D, 0);
} }
![Page 16: Trees ADT](https://reader036.vdocument.in/reader036/viewer/2022081421/56813115550346895d976761/html5/thumbnails/16.jpg)
25 2006June 1200. AM 16Week 09 - Tree ADT
ใช้� ใช้� Recursive Function Recursive Function ที่��ช้&�อ ที่��ช้&�อ ListDirListDir ค!าอาร�ก*วเมูนต่�ที่��ส!งให�ก�บ ค!าอาร�ก*วเมูนต่�ที่��ส!งให�ก�บ ListDirListDir เป็$นค!าอ�างอ*งไป็ย�ง เป็$นค!าอ�างอ*งไป็ย�ง Tree Tree
ได�แก!ได�แก!ช้&�อช้&�อ Directory Directory หร&อ หร&อ File File ที่��ต่�องการแสดงช้&�อที่��ต่�องการแสดงช้&�อ และ และ ค!า ค!า Depth Depth ข้อง ข้อง Directory Directory หร&อ หร&อ File File น�1นๆน�1นๆ ซึ่�งบ!งบอกถึง ซึ่�งบ!งบอกถึงจำ(านวน จำ(านวน tab tab ที่��ต่�องแสดง ที่��ต่�องแสดง
ListDir (ListDir (DirectoryOrFileDirectoryOrFile D, D, intint Depth) Depth){{
PrintName(D, Depth);PrintName(D, Depth);if(D is a directory)if(D is a directory) for each child, C, of Dfor each child, C, of D ListDir ListDir ((CC, , Depth+1Depth+1););
}}
main()main(){{
……ListDirListDir ( (DD, , 00););
} }
![Page 17: Trees ADT](https://reader036.vdocument.in/reader036/viewer/2022081421/56813115550346895d976761/html5/thumbnails/17.jpg)
25 2006June 1200. AM 17Week 09 - Tree ADT
PrintnamePrintname ซึ่�งมู�พัารามู*เต่อร�ค&อ ซึ่�งมู�พัารามู*เต่อร�ค&อ ช้&�อ ช้&�อ File/DirectoryFile/Directory และ และ จำ(านวน จำ(านวน Tab Tab ที่��ต่�องแสดงก!อนหน�าช้&�อ ซึ่�งระบ2โดย ที่��ต่�องแสดงก!อนหน�าช้&�อ ซึ่�งระบ2โดย DepthDepth
ถึ�าอาร�ก*วเมูนต่�ที่��ส!งให�ก�บ ถึ�าอาร�ก*วเมูนต่�ที่��ส!งให�ก�บ ListDirListDir เป็$น เป็$น Directory Directory ฟ:งก�ช้��นฟ:งก�ช้��นจำะที่(าการเร�ยกต่�วเองเพั&�อที่(างานแบบ จำะที่(าการเร�ยกต่�วเองเพั&�อที่(างานแบบ Recursive Recursive ก�บ ก�บ Child Child ที่2กต่�วข้อง ที่2กต่�วข้อง Directory Directory น�1นๆที่�ละต่�ว แต่!เน&�องจำาก น�1นๆที่�ละต่�ว แต่!เน&�องจำาก Child Child เหล!าเหล!าน�1มู� น�1มู� Depth Depth เพั*�มูข้1น เพั*�มูข้1น 1 1 ค!าจำงต่�องการ ค!าจำงต่�องการ Tab Tab เพั*�มูข้1นเป็$น เพั*�มูข้1นเป็$น Depth + 1Depth + 1
ListDir (DirectoryOrFile D, int Depth)ListDir (DirectoryOrFile D, int Depth){{
PrintName(D, Depth);PrintName(D, Depth);if(D is a directory)if(D is a directory) for each child, C, of Dfor each child, C, of D ListDir(C, Depth+1);ListDir(C, Depth+1);
}}main()main(){{
……ListDir(D, 0);ListDir(D, 0);
} }
ช้&�อข้อง ช้&�อข้อง Directory Directory หร&อ หร&อ File File จำะถึ�ก จำะถึ�ก printprint ออกพัร�อมูก�บจำ(านวน ออกพัร�อมูก�บจำ(านวน Tabs Tabs ที่��ต่�องการ ที่��ต่�องการ print print ไว�ด�านหน�า ไว�ด�านหน�า
![Page 18: Trees ADT](https://reader036.vdocument.in/reader036/viewer/2022081421/56813115550346895d976761/html5/thumbnails/18.jpg)
25 2006June 1200. AM 18Week 09 - Tree ADT
ว*ธ์�การที่!อง ว*ธ์�การที่!อง Tree Tree แบบน�1แบบน�1เร�ยกว!า เร�ยกว!า Tree Tree Traversal Traversal แบบ แบบ PreorderPreorder
![Page 19: Trees ADT](https://reader036.vdocument.in/reader036/viewer/2022081421/56813115550346895d976761/html5/thumbnails/19.jpg)
25 2006June 1200. AM 19Week 09 - Tree ADT
Tree TraversalTree Traversal
Preorder Traversal Preorder Traversal:: Root Root ข้อง ข้อง Tree Tree จำะถึ�ก จำะถึ�ก visit visit ก!อนก!อน จำากน�1นจำงค!อย จำากน�1นจำงค!อย visit Subtrees visit Subtrees ที่��เป็$น ที่��เป็$น root root ข้อง ข้อง child child แต่!ละต่�ว โดยแต่!ละต่�ว โดยงานที่��ต่�องกระที่(าก�บ งานที่��ต่�องกระที่(าก�บ
Node Node จำะที่(าก!อน จำะที่(าก!อน (pre) (pre) ที่��จำะเล&�อนไป็ ที่��จำะเล&�อนไป็ visit Child visit Childข้อง ข้อง NodeNode น�1นๆน�1นๆ
Postorder Traversal Postorder Traversal:: Subtrees Subtrees ที่��เป็$น ที่��เป็$น root root ข้อง ข้อง child child แต่!ละต่�วจำะถึ�ก แต่!ละต่�วจำะถึ�ก visit visit แบบ แบบ recursive recursive ก!อนที่��จำะ ก!อนที่��จำะ visit visit ต่�ว ต่�ว Root Root โดยโดยงานที่��งานที่��ต่�องกระที่(าก�บ ต่�องกระที่(าก�บ Node Node จำะที่(าหล�ง จำะที่(าหล�ง (post) (post) จำากที่�� จำากที่�� visit Child visit Child ข้อง ข้อง Node Node และที่(างานบน และที่(างานบน Child Child ข้อง ข้อง Node Node น�1นๆหมูดแล�วน�1นๆหมูดแล�ว
![Page 20: Trees ADT](https://reader036.vdocument.in/reader036/viewer/2022081421/56813115550346895d976761/html5/thumbnails/20.jpg)
25 2006June 1200. AM 20Week 09 - Tree ADT
Preorder Preorder TraversalTraversal
![Page 21: Trees ADT](https://reader036.vdocument.in/reader036/viewer/2022081421/56813115550346895d976761/html5/thumbnails/21.jpg)
25 2006June 1200. AM 21Week 09 - Tree ADT
Postorder Postorder TraversalTraversal
![Page 22: Trees ADT](https://reader036.vdocument.in/reader036/viewer/2022081421/56813115550346895d976761/html5/thumbnails/22.jpg)
25 2006June 1200. AM 22Week 09 - Tree ADT
Binary Tree Binary Tree Binary Tree Binary Tree หมูายถึง หมูายถึง Tree Tree ที่��แต่!ละ ที่��แต่!ละ Node Node ไมู!ไมู!
สามูารถึมู� สามูารถึมู� Child Child ได�เก*นกว!า ได�เก*นกว!า 2 2 ต่�ว ต่�ว
Binary Tree Binary Tree ที่��ป็ระกอบด�วย ที่��ป็ระกอบด�วย Root Root และ และ Subtree 2 Subtree 2 อ�นค&อ อ�นค&อ TTLL และ และ TTRR ซึ่�งที่�1งค�!อาจำจำะเป็$น ซึ่�งที่�1งค�!อาจำจำะเป็$น Tree Tree ว!างก0ได� ว!างก0ได�
![Page 23: Trees ADT](https://reader036.vdocument.in/reader036/viewer/2022081421/56813115550346895d976761/html5/thumbnails/23.jpg)
25 2006June 1200. AM 23Week 09 - Tree ADT
Depth Depth ข้อง ข้อง Binary Tree Binary Tree โดยเฉล��ยจำะมู�ค!าน�อยกว!า โดยเฉล��ยจำะมู�ค!าน�อยกว!า N N ค!อนข้�างมูาก ค!อนข้�างมูาก
ค!า ค!า Depth Depth เฉล��ยอย�!ที่�� เฉล��ยอย�!ที่�� O(√N)O(√N) ค!า ค!า Depth Depth มู�อาจำส�งถึง มู�อาจำส�งถึง N-1 N-1 ก0ได�เช้!นเมู&�อ ก0ได�เช้!นเมู&�อ Tree Tree มู�มู�
ล�กษณิะด�งร�ป็ ล�กษณิะด�งร�ป็
![Page 24: Trees ADT](https://reader036.vdocument.in/reader036/viewer/2022081421/56813115550346895d976761/html5/thumbnails/24.jpg)
25 2006June 1200. AM 24Week 09 - Tree ADT
การสร�างต่�นไมู�แบบที่ว*ภาค การสร�างต่�นไมู�แบบที่ว*ภาค (Binary Tree Implementation)(Binary Tree Implementation)
Binary Tree Binary Tree สามูารถึสามูารถึมู� มู� Child Child ได�มูากที่��ส2ดเพั�ยงแค!ได�มูากที่��ส2ดเพั�ยงแค! 2 2 ต่�วต่�ว จำงสามูารถึสร�าง จำงสามูารถึสร�าง Pointer Pointer ไป็ย�ง ไป็ย�ง Child Child แต่!ละแต่!ละต่�วได�โดยต่รง ต่�วได�โดยต่รง
Node Node มู�โครงสร�างเป็$นแบบ มู�โครงสร�างเป็$นแบบ Structure Structure ที่��ป็ระกอบที่��ป็ระกอบด�วยส!วน ด�วยส!วน Key element Key element เพั&�อเก0บข้�อมู�ล และ เพั&�อเก0บข้�อมู�ล และ Pointer Pointer 2 2 ต่�ว ต่�ว (Left (Left และ และ Right) Right) เพั&�อช้�1ไป็ย�ง เพั&�อช้�1ไป็ย�ง Nodes Nodes อ&�น อ&�น struct struct TreeNodeTreeNode{{
string element ;string element ;TreeNode* left ;TreeNode* left ;TreeNode* right ;TreeNode* right ;
} }
element
left
right
![Page 25: Trees ADT](https://reader036.vdocument.in/reader036/viewer/2022081421/56813115550346895d976761/html5/thumbnails/25.jpg)
25 2006June 1200. AM 25Week 09 - Tree ADT
การป็ระย2กต่�ใช้�งาน การป็ระย2กต่�ใช้�งาน Binary TreeBinary Treeต่�นไมู�ข้องน*พัจำน�ที่างคณิ*ต่ศาสต่ร� ต่�นไมู�ข้องน*พัจำน�ที่างคณิ*ต่ศาสต่ร� (Expression (Expression
Tree)Tree) เราสามูารถึแที่นน*พัจำน�ที่างคณิ*ต่ศาสต่ร�ด�วยโครงสร�างข้�อมู�ลเราสามูารถึแที่นน*พัจำน�ที่างคณิ*ต่ศาสต่ร�ด�วยโครงสร�างข้�อมู�ล
แบบต่�นไมู�ได� เช้!นแที่น แบบต่�นไมู�ได� เช้!นแที่น ((A*B) + C) + ((D + (E / F)) - G)((A*B) + C) + ((D + (E / F)) - G)
![Page 26: Trees ADT](https://reader036.vdocument.in/reader036/viewer/2022081421/56813115550346895d976761/html5/thumbnails/26.jpg)
25 2006June 1200. AM 26Week 09 - Tree ADT
ต่�นไมู�ข้องน*พัจำน�ที่างคณิ*ต่ศาสต่ร� ต่�นไมู�ข้องน*พัจำน�ที่างคณิ*ต่ศาสต่ร� (Expression Tree)(Expression Tree)
โหนดใบ โหนดใบ (Leave)(Leave) ข้อง ข้อง Expression Tree Expression Tree ค&อ ค&อ OperandsOperands ((ต่�วถึ�กด(าเน*นการต่�วถึ�กด(าเน*นการ ) ) ได�แก!ค!าคงที่�� ได�แก!ค!าคงที่�� (Constant)(Constant) หร&อต่�วแป็ร หร&อต่�วแป็ร (Variable)(Variable)
โหนดอ&�นๆบรรจำ2 โหนดอ&�นๆบรรจำ2 Operators Operators ((ต่�วด(าเน*นการต่�วด(าเน*นการ ) )
![Page 27: Trees ADT](https://reader036.vdocument.in/reader036/viewer/2022081421/56813115550346895d976761/html5/thumbnails/27.jpg)
25 2006June 1200. AM 27Week 09 - Tree ADT
การค(านวณิหาค!าข้อง การค(านวณิหาค!าข้อง Expression Expression TreeTree
หาค!าข้อง หาค!าข้อง Infix expression Infix expression ((อาจำรวมูวงเล0บด�วยอาจำรวมูวงเล0บด�วย ) ) ได�โดย ได�โดย หาค!าข้องน*พัจำน�ที่างคณิ*ต่ศาสต่ร� หาค!าข้องน*พัจำน�ที่างคณิ*ต่ศาสต่ร� (Expression) (Expression) พัร�อมูพัร�อมู
วงเล0บ ข้อง วงเล0บ ข้อง subtree subtree หร&อ หร&อ tree tree ที่างด�านซึ่�ายที่างด�านซึ่�ายด�วยว*ธ์�แบบ ด�วยว*ธ์�แบบ rrecursiveecursive
แสดงค!า แสดงค!า OperatorOperator ที่�� ที่�� Root Root ข้อง ข้อง subtree/tree subtree/tree ออกมูาออกมูา หาค!าข้องน*พัจำน�ที่างคณิ*ต่ศาสต่ร� หาค!าข้องน*พัจำน�ที่างคณิ*ต่ศาสต่ร� (Expression) (Expression) พัร�อมูพัร�อมู
วงเล0บ ข้อง วงเล0บ ข้อง subtreesubtree หร&อ หร&อ treetree ที่างด�านข้วาที่างด�านข้วาด�วยว*ธ์�แบบ ด�วยว*ธ์�แบบ recursiverecursive
ว*ธ์�การที่��กระที่(าการบนสมูาช้*กที่างด�านซึ่�ายข้องโหนดก!อนต่�วว*ธ์�การที่��กระที่(าการบนสมูาช้*กที่างด�านซึ่�ายข้องโหนดก!อนต่�วโหนด แล�วต่ามูการกระที่(าบนสมูาช้*กที่างด�านข้วาข้องโหนด โหนด แล�วต่ามูการกระที่(าบนสมูาช้*กที่างด�านข้วาข้องโหนด (Left, Node, Right) (Left, Node, Right) น�1เร�ยกว!า น�1เร�ยกว!า Inorder TraversalInorder Traversal
![Page 28: Trees ADT](https://reader036.vdocument.in/reader036/viewer/2022081421/56813115550346895d976761/html5/thumbnails/28.jpg)
25 2006June 1200. AM 28Week 09 - Tree ADT
การค(านวณิหาค!าข้อง การค(านวณิหาค!าข้อง Expression TreeExpression Tree
Inorder Traversal Inorder Traversal (Left, Node, Right) (Left, Node, Right) ให� ให� Infix Expression Infix Expression ((A*B)+C)+((D+((A*B)+C)+((D+
(E/F))-G)(E/F))-G)
Postorder Traversal Postorder Traversal (Left, Right, Node) (Left, Right, Node) ให� ให� Postfix Expression Postfix Expression ABAB** CC++DEFDEF/+/+GG--
++
Preorder Traversal Preorder Traversal (Node, Left, Right) (Node, Left, Right) ให� ให� Prefix Expressio Prefix Expression n ++*++*ABCABC-+-+DD//EFGEFG
![Page 29: Trees ADT](https://reader036.vdocument.in/reader036/viewer/2022081421/56813115550346895d976761/html5/thumbnails/29.jpg)
25 2006June 1200. AM 29Week 09 - Tree ADT
การค(านวณิหาค!าข้อง การค(านวณิหาค!าข้อง Expression Expression TreeTree
Infix Expression Infix Expression
PostfixPostfix Expression Expression
Prefix PrefixExpressioExpression n
(A + (B/C)) + ((D*E)+((F-(A + (B/C)) + ((D*E)+((F-G)*H))G)*H))
A B C / + D E * F G – H * + A B C / + D E * F G – H * + ++
+ + A / B C + * D E * - F G + + A / B C + * D E * - F G HH
![Page 30: Trees ADT](https://reader036.vdocument.in/reader036/viewer/2022081421/56813115550346895d976761/html5/thumbnails/30.jpg)
25 2006June 1200. AM 30Week 09 - Tree ADT
การสร�างต่�นไมู�ข้องน*พัจำน�ที่างคณิ*ต่ศาสต่ร� การสร�างต่�นไมู�ข้องน*พัจำน�ที่างคณิ*ต่ศาสต่ร� การเป็ล��ยน การเป็ล��ยน Postfix Expression Postfix Expression เป็$น เป็$น Expression TreeExpression Tree อ!านน*พัจำน�ที่างคณิ*ต่ศาสต่ร� อ!านน*พัจำน�ที่างคณิ*ต่ศาสต่ร� (Expression) (Expression) เข้�ามูาที่�ละต่�วเข้�ามูาที่�ละต่�ว ถึ�าอ�กษรที่��ได�เป็$น ถึ�าอ�กษรที่��ได�เป็$น OperandOperand ( (ต่�วถึ�กด(าเน*นการต่�วถึ�กด(าเน*นการ ) ) ให�ให�สร�างสร�าง
ต่�นไมู�ข้นาด ต่�นไมู�ข้นาด 1 1โหนด แล�ว โหนด แล�ว push push พัอยน�เต่อร� พัอยน�เต่อร� 1 1อ�นลงบนสอ�นลงบนสแต่กแต่ก
ถึ�าอ�กษรที่��ได�เป็$น ถึ�าอ�กษรที่��ได�เป็$น OperatorOperator ( (ต่�วด(าเน*นการต่�วด(าเน*นการ ) ) ให� ให� pop pop พัอยน�พัอยน�เต่อร�ไป็ย�งต่�นไมู� เต่อร�ไป็ย�งต่�นไมู� 2 2อ�นค&อ อ�นค&อ 1T 1T และ และ 2 2 ออกมูาจำากสแต่กออกมูาจำากสแต่กแล�วแล�วสร�างต่�นไมู�ใหมู!ข้1นหน�งอ�นให�มู� สร�างต่�นไมู�ใหมู!ข้1นหน�งอ�นให�มู� Root Root อย�!ที่�� อย�!ที่�� Operator Operator ที่��ร�บที่��ร�บเข้�ามูาและมู� เข้�ามูาและมู� Child Child ด�านซึ่�ายและด�านข้วา เป็$น ด�านซึ่�ายและด�านข้วา เป็$น 1 1 และ และ 2 2 ต่ามูต่ามูล(าด�บล(าด�บ
พัอยน�เต่อร�ที่��ช้�1ไป็ย�งต่�นไมู�ที่��สร�างข้1นมูาใหมู!น�1 จำะถึ�ก พัอยน�เต่อร�ที่��ช้�1ไป็ย�งต่�นไมู�ที่��สร�างข้1นมูาใหมู!น�1 จำะถึ�ก Push Push ลงลงไป็บนสแต่ก ไป็บนสแต่ก
![Page 31: Trees ADT](https://reader036.vdocument.in/reader036/viewer/2022081421/56813115550346895d976761/html5/thumbnails/31.jpg)
25 2006June 1200. AM 31Week 09 - Tree ADT
InputInput a b + c d e a b + c d e + * *+ * *
a ba b + c d e + * * + c d e + * * 2Input 2Input ต่�วแรกเป็$น ต่�วแรกเป็$น
A AAAAAA A AAAAAA จำงสร�างต่�นไมู�จำงสร�างต่�นไมู�ข้นาด ข้นาด 1 1 โหนดแล�ว โหนดแล�ว
push push พัอยน�เต่อร� พัอยน�เต่อร� 1 1 อ�นอ�นลงบนสแต่กลงบนสแต่ก
a b a b ++ c d e + * * c d e + * * อ!าน อ!าน + + เข้�ามูา จำง เข้�ามูา จำง pop pop พัอพัอ
ยน�เต่อร�ออกมูาจำากสแต่ก ยน�เต่อร�ออกมูาจำากสแต่ก สร�างต่�นไมู�ใหมู! สร�างต่�นไมู�ใหมู! Push Push พัอยน�พัอยน�เต่อร�ที่��ช้�1ไป็ย�งต่�นไมู�ที่��สร�างข้1นเต่อร�ที่��ช้�1ไป็ย�งต่�นไมู�ที่��สร�างข้1นมูาใหมู!ลงไป็บนสแต่กมูาใหมู!ลงไป็บนสแต่ก
![Page 32: Trees ADT](https://reader036.vdocument.in/reader036/viewer/2022081421/56813115550346895d976761/html5/thumbnails/32.jpg)
25 2006June 1200. AM 32Week 09 - Tree ADT
a b + c d e a b + c d e ++ ** ** อ!าน อ!าน + + เข้�ามูา จำง เข้�ามูา จำง pop pop พัอพัอ
ยน�เต่อร�ออกมูาจำากสแต่ก ยน�เต่อร�ออกมูาจำากสแต่ก สร�างต่�นไมู�ใหมู! สร�างต่�นไมู�ใหมู! Push Push พัอยน�พัอยน�เต่อร�ที่��ช้�1ไป็ย�งต่�นไมู�ที่��สร�างข้1นเต่อร�ที่��ช้�1ไป็ย�งต่�นไมู�ที่��สร�างข้1นมูาใหมู!ลงไป็บนสแต่กมูาใหมู!ลงไป็บนสแต่ก
a b + a b + c d ec d e + * * + * * อ!าน อ!าน cc,, d, e d, e เข้�ามูา สร�างเข้�ามูา สร�าง
ต่�นไมู�ข้นาด ต่�นไมู�ข้นาด 1 1 โหนด ส(าหร�บโหนด ส(าหร�บอ�กษรแต่!ละต่�ว แล�ว อ�กษรแต่!ละต่�ว แล�ว Push Pushพัอยน�เต่อร�ที่��ช้�1ไป็ย�งต่�นไมู� พัอยน�เต่อร�ที่��ช้�1ไป็ย�งต่�นไมู� แต่!ละอ�นน�1ลงบนสแต่กแต่!ละอ�นน�1ลงบนสแต่ก
![Page 33: Trees ADT](https://reader036.vdocument.in/reader036/viewer/2022081421/56813115550346895d976761/html5/thumbnails/33.jpg)
25 2006June 1200. AM 33Week 09 - Tree ADT
a b + c d e + * a b + c d e + * ** อ!าน อ!าน * * เข้�ามูา ที่(าการ เข้�ามูา ที่(าการ
Pop Pop พัอยน�เต่อร�ออกมูาพัอยน�เต่อร�ออกมูาจำากสแต่ก แล�วสร�างต่�นไมู�จำากสแต่ก แล�วสร�างต่�นไมู�ใหมู!โดยมู� ใหมู!โดยมู� * * ที่��อ!านเข้�ามูาที่��อ!านเข้�ามูาเป็$น เป็$น RootRoot
a b + c d e + a b + c d e + ** * * อ!าน อ!าน * * เข้�ามูา จำงที่(าการ เข้�ามูา จำงที่(าการ
Pop Pop พัอยน�เต่อร�ออกมูาจำากพัอยน�เต่อร�ออกมูาจำากสแต่ก แล�วสร�างต่�นไมู�ใหมู!สแต่ก แล�วสร�างต่�นไมู�ใหมู!โดยมู� โดยมู� * * ที่��อ!านเข้�ามูาเป็$นที่��อ!านเข้�ามูาเป็$น RootRoot