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

Report
โครงสร้ างข้ อมูลแบบต้ นไม้
(TREE)
Tree
• หมายถึง โครงสร้ างข้ อมูลที่ออกแบบมาให้ มีลกั ษณะไม่เป็ นเชิงเส้ น มีการ
จัดเก็บข้ อมูลเชื่อมโยงกันเป็ นระดับชัน้ โดยเริ่มจากโหนดแรกที่อยูบ่ นสุด
เรี ยกว่า Root Node เชื่อมโยงไปยังโหนดระดับรองลงไป แต่ละ
ระดับก็มีการเชื่อมโยงโหนดระดับต่อไป ซึง่ เรี ยกว่า Subtree
นิยามของโครงสร้างต้นไม้
• โครงสร้างข้อมูลแบบต้นไม้ มีคุณสมบัติดงั นี้
1. มีโหนดที่เรียกว่า รากหรือรูต (Root node) , R
2. โหนดที่ไม่ใช่รตู แบ่งย่อยออกเป็ น n กลุ่ม โดยที่แต่ละกลุ่มไม่มี
โหนด ร่วมกันเลย เช่น กลุ่ม T1 , T2 ,…..Tn (n >=0) แต่
ละกลุ่มก็เป็ นต้นไม้เหมือนกัน จะเรียกว่าต้นไม้ยอ่ ย (Subtree)
ลักษณะของทรี
จากรูป
R เป็ นรูทของต้นไม้ยอ่ ย A,B,C,D
A เป็ นรูทของต้นไม้ยอ่ ย E,F,G
F เป็ นรูทของต้นไม้ยอ่ ย J
B เป็ นรูทของต้นไม้ยอ่ ย 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 เป็ นต้น
โครงสร้างต้นไม้ (Tree Structure)
Root Nodes
R
Nodes X เป็ น Immediate Predecessor
ของ Y หรือ X เป็ น Father (Parent) ของ Y
C
Leaf Nodes
A
B
D
H
E
I
X
Y
G
Nodes Y เป็ น Immediate Successor
ของ X หรือ Y เป็ น son (Child) ของ X
โครงสร้างต้นไม้ (Tree Structure)
Root Nodes
R
A
B
D
H
C
Leaf Nodes
E
I
Level 0
X
Level 1
Y
Level 2
G
Level 3
Level แสดงถึงหน่ วยระยะทางตามแนวดิง่ ของโหนดว่าอยูห
่ า่ งจาก
Root Node เป็ นระยะเท่าไรและทุกกิง่ มีความยาวเท่ากันคือ 1 หน่ วย
โครงสร้างต้นไม้ (Tree Structure)
Root Nodes
R
A
B
D
H
C
Leaf Nodes
E
I
Level 0
X
Level 1
Y
Level 2
G
Level 3
Degree แสดงถึงจานวนของ Subtree ของโหนดนัน
้ เช่น A มี Degree
2, X มี Degree 1
โครงสร้างต้นไม้ (Tree Structure)
Root Nodes
R
A
B
D
H
C
Leaf Nodes
E
I
Level 0
X
Level 1
Y
Level 2
G
Level 3
Leaf Node แสดงถึงโหนดทีม
่ ี Degree = 0 เช่น C, D, E, I ,G ส่วนโหนด
ทีม
่ ี Degree <> 0 เรียกว่า Branch Node หรือ Interior Node
โครงสร้างต้นไม้ (Tree Structure)
R
C
A
B
D
H
E
I
X
Nodes X เป็ น Immediate Predecessor
ของ Y หรือ X เป็ น Father (Parent) ของ Y
Y
Nodes Y เป็ น Immediate Successor
ของ X หรือ Y เป็ น son (Child) ของ X
G
Predecessor หมายถึง ตัว Node ทีอ
่ ยูก
่ อ
่ นหน้า
Successor หมายถึง ตัว Node ทีม
่ าทีห
่ ลัง
เช่น R, B, H เป็ น Predecessor ของ E, I,
I เป็ น Successor ของ H
ต้นไม้แบบไบนารี (Binary Tree)
• ต้นไม้ไบนารีเป็ น rooted binary tree ที่วา่ งเปล่า หรือ
ประกอบด้วยรูตโหนดและต้นไม้ไบนารี 2 กลุ่มที่ไม่มีโหนด
ร่วมกัน แต่ละกลุ่มจะมีชื่อเรียก (โดยตาแหน่ งที่อยูห่ รือที่
เขียน) ว่าต้นไม้ยอ่ ยทางซ้าย (left subtree) และต้นไม้ยอ่ ย
ทางขวา (right subtree) ตามลาดับ
คาว่า ว่างเปล่า ในนิ ยามหมายความว่า ต้นไม้ไบนารีตน้ นั้นมี
แต่รตู โหนดเพียงโหนดเดียวเท่านั้น
17
ไบนารี ทรี (Binary Trees)
• คุณสมบัติ
• เป็ นทรี ที่สามารถมีลกู ได้ ไม่เกินสองโหนด
• เป็ นทรี ที่แต่ละ่ โหนดจะมีซบั ทรี <=2
18
ตัวอย่ าง Binary Tree
19
ตัวอย่างไบนารี ทรี ในรูปแบบต่างๆ
Empty
หรือ
Null Tree
A
C
B
D
V
C
E
F
G
S
G
F
D
(ข)
(ก)
X
(ค)
รูป (ก), (ข) และ (ค) เป็ นต้นไม้ไบนารี
(ง)
(ฉ)
(จ)
รูป (ง), (จ) และ (ฉ)ไม่ใช่ตน้ ไม้ไบนารี
ต้นไม้ไบนารีแบบสมบูรณ์ (Complete Binary Tree)
• ต้นไม้ไบนารีแบบสมบูรณ์ ภายในมีโหนดย่อยซ้ายและขวา (นัน
่ คือ
แต่ละโหนดภายในมี left son และ right son ) และโหนดใบ (leaf
nodes) ทั้งหลายอยูใ่ นระดับที่ n รูป (ก) เป็ นต้นไม้ไบนารีแบบ
สมบูรณ์ที่มี 3 ระดับ
D
R
K
W
O
U
(ก)
M
• ต้นไม้ไบนารีแบบสมบูรณ์ที่มีโหนดใบอยูท
่ ี่ระดับ n จะมีโหนดทั้งหมดเท่ากับ 2n-1
W
V
D
S
A
Q
N
จากรูป จานวนโหนดเท่ากับ 23-1 =
7
โหนด
การแทนต้นไม้ไบนารีในหน่วยความจา
• ต้นไม้ไบนารีสามารถแทนได้ 2 แบบ คือ
1. การแทนโดยอาศัยพอยน์เตอร์
2. การแทนโดยอาศัยแอดเดรสของโหนด หรือการแทนแบบ ซีเควนเชียล
(sequential)
การแทนโดยอาศัยพอยน์เตอร์
• ทาได้โดยให้แต่ละโหนดมีโครงสร้างดังรูปต่อไปนี้
DATA
LLINK RLINK
หรือ
DATA
LSON RSON
โครงสร้างโหนดสาหรับต้นไม้ไบนารี
LLINK
หรือ LSON เป็ นพอยน์เตอร์ชี้ไปยังต้นไม้ยอ่ ยทางซ้าย
ส่วน RLINK หรือ RSON เป็ นพอยน์เตอร์ชี้ไปยังต้นไม้ยอ่ ยทางขวา
การแทนโดยอาศัยแอดเดรสของโหนด หรือการแทนแบบซี
เควนเชียล
• เป็ นการแทนต้นไม้ไบนารีดว้ ยอาร์เรย์ 1 มิติอาร์เรย์เดียว การ
แทนแบบนี้ เหมาะกับโครงสร้างต้นไม้ไบนารีแบบ
complete binary tree ที่สุด การแทนจะเริ่มต้นด้วย
การให้หมายเลขแก่แต่ละโหนด ตั้งแต่ระดับ 1 ระดับ 2 ...ไป
เรื่อยๆ จนถึงระดับ k การให้ตวั เลขในแต่ละระดับจะให้จาก
ซ้ายไปขวา โดยให้รตู โหนดมีหมายเลข 1 เสมอ การให้ตวั เลข
จะต้องถือว่าต้นไม้ไบนารีเป็ นต้นไม้ไบนารีแบบสมบูรณ์ จึงจะให้
ตัวเลขที่อยูแ่ ก่โหนดได้
1
A
2
4
8
E
3
B
C
X
D
9
10
6
5
11 12
7
13
14
15
การให้แอดเดรสแก่ตน้ ไม้ไบนารีที่ถกู ต่อเติมให้สมบูรณ์
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
A B X C D - - E - - - - - - รูปการแทนต้นไม้โดยใช้อาร์เรย์ ถ้าพิจาณาโหนดใดๆ เป็ นตาแหน่ ง x โหนดลูก
ทางซ้ายจะมีดชั นี 2x ส่วนโหนดลูกทางขวาจะมีดชั นี 2x+1
การเปลี่ยน Tree ให้ เป็ น Binary Tree
Data07 Tree(28)
ต้ นไม้ แบบออดินารี(ordinary) คือต้นไม้ที่มีดีกรี สูงสุ ดของแต่ละโหนด
เป็ นเท่าไรก็ได้ ซึ่งการเปลีย่ นให้ เป็ น binary tree เป็ นการจัดให้แต่ละ
โหนดมีดีกรี สูงสุ ดเท่ากับสอง มีข้นั ตอนดังนี้
1. พิจารณาที่กิ่งทางซ้ายสุ ดที่อยูใ่ ต้พอ่ เดียวกัน
2. ต่อกิ่งของโหนดทางซ้ายสุ ดในขั้นที่ 1 ไปทางขวาตามลาดับอาวุโส
กับพี่นอ้ งที่เกิดจากพ่อเดียวกัน
3. ทาขั้นที่ 1 และ 2 จนครบทุกโหนด
4. ปรับมุมของแต่ละกิ่ง ประมาณ 45 องศา
การเปลี่ยน Tree ให้ เป็ น Binary Tree
ขันที
้ ่1
ขันที
้ ่4
ขันที
้ ่2
ขันที
้ ่3
Data07 Tree(29)
Data07 Tree(30)
การเปลี่ยน Tree ให้ เป็ น Binary Tree
A
ตัวอย่ าง แสดงการเปลี่ยนต้นไม้ให้เป็ นแบบทวิภาค
โจทย์
A
B
B
C
F
D
E
G
H
C
K
J
L
F
D
E
G
K
J
H
L
I
A
I
B
F
ขั้นที่ 1-3
C
G
D
ผลลัพธ์
J
K
E
H
L
I
การท่องต้นไม้ (Tree Traversal)
Tree Traversal หมายถึงการไปยังโหนดเพือ
่ ประมวลผลบางอย่างที่
ต้องการกระทากับโหนดนัน
้ เช่น หาข่าวสาร
แบ่งออกเป็ น 3 วิธี (ทีน
่ ิยมใช้)
1. Pre-Order Traversal (RTLTR)
2. In-Order Traversal (TLRTR)
3. Post-Order Traversal (TLTRR)
การท่ องผ่ าน Binary Tree
Data07
Tree(32)
การท่องผ่านโหนด หมายถึง การเข้าไปในโครงสร้างต้นไม้เพื่อนาข้อมูลใน
โหนดมาแสดง หรื อเพื่อการค้นหา หรื อการประมวลผล การเดินเยีย่ มโหนดมี 3 วิธี
1. Inorder traversal หรือ Symmetric order จะทาการเยีย่ มโหนดในต้นไม้
ย่อยทางซ้ายแบบอินออเดอร์ ก่อนเยีย่ มโหนดรากและเยีย่ มโหนดในต้นไม้ยอ่ ยทางขวา
แบบอินออเดอร์ (Left/ Root/Right)
2. Preorder traversal จะทาการเยีย่ มโหนดรากก่อน เยีย่ มโหนดในต้นไม้ยอ่ ย
ทางซ้ายแบบพรี ออเดอร์ และเยีย่ มโหนดในต้นไม้ยอ่ ยทางขวาแบบพรี ออเดอร์ (Root/
Left/ Right)
3. Postorder traversal หรือ Endorder จะทาการเยีย่ มโหนดในต้นไม้ยอ่ ย
ทางซ้ายแบบ โพสออเดอร์ ก่อนเยีย่ มโหนดในต้นไม้ยอ่ ยทางขวาแบบ โพสออเดอร์ และ
เยีย่ มโหนดราก (Left/ Right/ Root)
การท่องต้นไม้ไบนารี (Binary Tree Traversal)
start
stop
R
แบบ Pre-Order Traversal
(Root/ Left/ Right)
A
C
X
D
Y
G
Result
R
A
C
D
X
Y
G
การท่องต้นไม้ไบนารี (Binary Tree Traversal)
start
stop
R
แบบ In-Order Traversal
เดอร์ (Left/ Root/Right)
A
C
X
D
Y
G
Result
C
A
D
R
G
Y
X
การท่องต้นไม้ไบนารี (Binary Tree Traversal)
start
stop
R
แบบ Post-Order Traversal
(Left/ Right/ Root)
A
C
X
D
Y
G
Result
C
D
A
G
Y
X
R
การท่ องผ่ าน Binary Tree
A
B
C
1. แบบอินออเดอร์ (Left/ Root/Right) จากภาพจะได้ BAC
2. แบบพรีออเดอร์ (Root/ Left/ Right) จากภาพจะได้ ABC
3. แบบโพสออเดอร์ (Left/ Right/ Root) จากภาพจะได้ BCA
Data07
Tree(36)
A
B
C
D
E
F
G
H
I
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
A
B
C
D
E
G
H
Pre-order : ABDGCEHIF
In-order : DGBAHEICF
Post- order : GDBHIEFCA
F
I
EX1
+
-
A
*
B
D
C
จงท่องเข้าไปในต้นไม้ แบบ
1.Pre-order
2.In-order 3.Post-order
Expression Tree
เป็ นต้นไม้แบบไบนารีที่ โหนดใบคือ operands, เช่นค่าคงที่หรือตัวแปร,
และโหนดรากคือ operators
จากรูปแสดง
Expression tree ของ (a + b * c) + ((d * e + f ) * g)
Expression Tree
Data07 Tree(41)
คือต้นไม้ที่สร้างขึ้นจากตัวกระทา(operand) และเครื่ องหมาย(operators) ทาง
คณิ ตศาสตร์ของนิพจน์ โดยการวางตัวกระทาที่โหนดใบ(leave node) และวางเครื่ องหมายไว้ที่
โหนดภายใน
สาหรับเครื่ องหมายที่เป็ นเครื่ องหมายเดี่ยว(unary operator) จะมีกิ่งต้นไม้ยอ่ ยเพียงข้าง
เดียว เรามักจะวาง เครื่ องหมายเดี่ยวไว้ทางซ้ายของตัวกระทา ซึ่งเครื่ องหมายที่จดั เป็ นเครื่ องหมายเดี่ยว
ได้แก่ - log() cos()
และมีเครื่ องหมายเดี่ยว ที่ถูกจัดวางไว้ทางขวาของตัวกระทา ได้แก่ แฟกทอเรี ยลฟั งก์ชนั เลขยก
กาลังต่างๆ
ตัวอย่ าง แสดงการสร้าง เอ็กเพรสชันทรี แบบทวิภาค จากนิพจน์ X * Y + Z
+
*
X
Z
Y
Expression Tree
Data07 Tree(42)
ตัวอย่าง แสดงการสร้างเอ็กเพรสชันทรี จากนิพจน์ (X – ((Y / R) * D))
*
X
/
Y
D
R
จะได้วา่
• การเยีย่ มโหนด แบบอินออเดอร์ จะได้ X-Y/R*D
ซึ่ งอยูใ่ นรู ปอินฟิ กฟอร์ ม
• การเยีย่ มโหนด แบบพรีออเดอร์ จะได้ -X*/YRD
ซึ่ งอยูใ่ นรู ปพรีฟิกฟอร์ ม
• การเยีย่ มโหนด แบบโพสออเดอร์ จะได้ XYR/D*- ซึ่ งอยูใ่ นรู ปโพสฟิ กฟอร์ ม
การสร้าง Expression Tree
1.
2.
3.
อ่านสัญลักษณ์จากนิ พจน์ที่ละตัว
ถ้าตัวที่อ่านมาเป็ น operand ให้สร้างโหนดของ tree หนึ่ ง
โหนดแล้ว push ลงใน stack
ถ้าตัวที่อ่านมาเป็ น operator ให้ pop จาก stack 2 ครั้ง
ซึ่งจะได้ trees T1 และ T2 (T1 นาออกก่อน) แล้วให้นามา
สร้างเป็ น tree ใหม่ที่มีราก (root) เป็ นตัว operator และมี
left และ right children เป็ น T1 และ T2 ตามลาดับ
จากนั้นให้ใส่ tree ใหม่นี้กลับลง stack
• ถ้าอินพุต คือ a b + c d e + * *
1
2
3
• ถ้าอินพุต คือ a b + c d e + * *
4
5
• ถ้าอินพุต คือ a b + c d e + * *
6
7
แบบฝึ กหัด
1. จากต้นไม้ไบนารีที่กาหนด ให้เขียนผลลัพธ์จากการท่องเข้าไปในต้นไม้ แบบ
Preorder ,Inorder , Postorder
A
H
B
F
G
D
2. จงสร้าง Expression Tree จากนิ พจน์ต่อไปนี้
2.1 (A - 2 * (B + C) – D * E) * F
2.2 A + (B – C) * D ^ ( E * F )
J
I
K
M
แบบฝึ กหัด
• 3. จงแปลงทรี ให้ เป็ นไบนารี ทรี
A
H
B
C
D
F
E
G
J
I
K
M

similar documents