trees adt

33
25 June 2006 12.00 A M 1 Week 09 - Tree ADT Trees Trees ADT ADT กกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกก กกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกก Linked Linked List List กกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกก กกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกก กกกกกกกกกกก กกกกกกกกกกก (Before) (Before) กกกกกกก กกกกกกก (After) (After) Linked List Linked List กกก กกก Running Time Running Time กกกกกกก กกกกกกก Linear, Linear, O(N) O(N) กกกกกกกกกกก กกกกกกกกกกก Input (N) Input (N) กกกก กกกก Running Time Running Time กกก กกก กกกกกกกกกกกก กกกกกกกกกกกก กกกกกกกกกกกกกกกกกกกกกกกก กกกก กกกกกกกกกกกกกกกกกกกกกกกก กกกก Trees Trees กกกกกกกก กกกกกกกก กกกกกกกกกกกกกกกกกกกกกกกกกกกก กกกกกกกกกกกกกกกกกกกกกกกกกกกก Running Time Running Time กกกก กกกก O(log N) O(log N) กกกกกกกกก กกกกกกกกกกกกกกกกกกกก กกกกกกกกก กกกกกกกกกกกกกกกกกกกก กกกกกกกกกกกกกกกกกก กกกกกกกกกกกกกกกกกก

Upload: claire-pittman

Post on 01-Jan-2016

34 views

Category:

Documents


0 download

DESCRIPTION

Trees ADT. การเข้าถึงข้อมูลที่มีโครงสร้างแบบ Linked List ซึ่งความสัมพันธ์ระหว่างข้อมูลแต่ละตัวเป็นแบบก่อน (Before) และหลัง (After) Linked List ให้ Running Time เป็นแบบ Linear, O(N) เมื่อจำนวน Input (N) มากๆ Running Time อาจจะมากเกินควร - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Trees ADT

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

25 2006June 1200. AM 18Week 09 - Tree ADT

ว*ธ์�การที่!อง ว*ธ์�การที่!อง Tree Tree แบบน�1แบบน�1เร�ยกว!า เร�ยกว!า Tree Tree Traversal Traversal แบบ แบบ PreorderPreorder

Page 19: Trees ADT

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

25 2006June 1200. AM 20Week 09 - Tree ADT

Preorder Preorder TraversalTraversal

Page 21: Trees ADT

25 2006June 1200. AM 21Week 09 - Tree ADT

Postorder Postorder TraversalTraversal

Page 22: Trees ADT

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

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

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

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

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

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

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

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

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

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

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

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