دفاع از پایان نامه مدل سازی اطلاعات ساختمان در تعمیر ونگهداری ساختمان
ساختمان داده درختها
description
Transcript of ساختمان داده درختها
![Page 1: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/1.jpg)
ساختمان داده
درخت هاحسین دهقاندانشکده فنی و مهندسی جم
![Page 2: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/2.jpg)
تعاریف
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
2
![Page 3: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/3.jpg)
تعریف درختتعريف: درخت مجموعه اي متناهي و غير تهي از •
يک يا چند گره است به طوريکه: باشد.ريشهداراي گره خاصي به نام ریشهزیر درختان گره های دیگر
مجموعه مجزا T1,…,Tn که هر يک از اين مجموعه ها خود يک درخت هستند.
یک گراف غیر جهت دار و بدون دور•
3
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
![Page 4: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/4.jpg)
ریشه، برگ، گره و یال
4
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
ریشه
برگ
گره
یال
nتعداد = 13
eتعداد = 12
![Page 5: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/5.jpg)
تعاریفریشه•
(aگره بدون پدر )•برگ•
,b, d, f, g, j, kبدون زیر درخت ) |گره بدون فرزند•l, m)
داخلیگره •(a, c, e, h, iگره غیر برگ )•kو jگره •
hفرزندان •
sibling یا برادر، هم نیا، همزادگره های •5
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
![Page 6: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/6.jpg)
تعاریف
6
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
درجه•گره: تعداد زیر درختان گره•درخت: ماکزیمم درجه گره های درخت•اجداد گره•
گره های موجود در مسیر طی شده تا ریشه••m ← i, e, a( یک گرهعمق )سطح•
طول مسیر از ریشه به آن گره••a ← 1 و h ← 3
![Page 7: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/7.jpg)
تعاریف
7
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
( درختعمق)ارتفاع •بیشترین سطح گره ها••4سوال•است.؟ برابر f سطح•است.؟ درخت برابر عمق )ارتفاع(•است.؟ برابر c نود درجه•است.؟ درخت برابر درجه•است. ?برابر c اجداد•است.? برابر h نسل هاي•
![Page 8: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/8.jpg)
نمایش درخت عمومی
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
8
![Page 9: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/9.jpg)
پرانتزگذاریابتدا ریشه•اطالعات فرزندان ریشه در پرانتز•اطالعات فرزندان از چپ به راست•
9
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
(a(b), (c(f, g, h(j, k))), (d), (e(i(l, m))))
![Page 10: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/10.jpg)
آرایه
10
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
ذخیره•(elementمقدار هر گره )•شماره درایه پدر هر عنصر•
![Page 11: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/11.jpg)
لیست پیوندیدرخت روبرو را مي توان در •
قالب ليست به صورت زير نشان داد
11
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
(A(B(E(K ،L)،F)،C(G)،D(H(M)،I،J)))ج
![Page 12: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/12.jpg)
فرزند چپ، همزاد راستهر گره حداکثر درای •
فرزند چپ1• همزاد راست1•
تبدیل درخت عمومی به •دودویی درخت
12
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
![Page 13: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/13.jpg)
درخت دودویی
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
13
![Page 14: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/14.jpg)
تعریف تاییkدرخت •
kدرختی که بیشینه تعداد فرزندان یک گره •باشد.
درخت دودویی•2حداکثر تعداد فرزندان هر گره = •تفاوت با درخت عادی•
می تواند دارای صفر گره باشد !•ترتیب فرزندان اهمیت دارد.•
14
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
![Page 15: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/15.jpg)
تبدیل درخت عمومی به دودوییهر درختي را مي توان به فرم درخت دودويي در •
آورد.
با بازنمايي بچه چپ-همزاد راست•
در درختهاي دودويي بين •
زير درخت چپ و راست
تمايز قائل مي شويم.
15
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
![Page 16: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/16.jpg)
انواع درختپر• فرزند دارند.2همه گره ها بجز سطح آخر •
← iتعداد گره سطح •← تعداد کل گره ها • ←تعداد کل برگ ها •← تعداد گره های داخلی •
16
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
h=⌊ log𝑛 ⌋+1=log(𝑛+1)
![Page 17: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/17.jpg)
انواع درختکامل• پرh-1تا ارتفاع •از چپ به راست پر hبرگها در ارتفاع •
می شوند.
تعداد گره ها•
17
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
h=⌊ log𝑛 ⌋+1=⌈ log(𝑛+1)⌉
2h− 1≤𝑛≤2h−1
![Page 18: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/18.jpg)
انواع درختاریب•1درجه رئوس بجز آخری برابر •
تعداد گره تک فرزندی••n-1
تعداد برگ ها••1
ارتفاع••h = n
18
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
![Page 19: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/19.jpg)
انواع درختمتوازن•1 یا 0اختالف سطح برگها •h-1یا hبرگها در سطح •
کامال متوازن•تمام برگها در یک سطح•
19
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
![Page 20: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/20.jpg)
خصوصیاتدرخت دودویی
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
20
![Page 21: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/21.jpg)
تعداد یالها
یا تعداد برگها0 : تعداد گره های درجه •1 : تعداد گره های درجه •2 : تعداد گره های درجه •
21
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
![Page 22: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/22.jpg)
تعداد برگ ها
← در درخت کامل و پر •
22
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
درخت پر
![Page 23: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/23.jpg)
عمق، تعداد گره
تعداد گره ها•
23
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
درخت پر
درخت اریب
درخت پر یا کامل
درخت پر
درخت اریب
![Page 24: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/24.jpg)
تعداد درخت دودویی مختلفگره می توان nتعداد درخت های مختلف که با •
ساخت:
تعداد درخت های دودویی کامل = تعداد برگهای •= hارتفاع
گره = nتعداد درخت های متفاوت با •
24
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
![Page 25: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/25.jpg)
نمایشدرخت دودویی
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
25
![Page 26: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/26.jpg)
آریهشماره گذاری گره ها به صورت زیر•
قراردادن عناصر در آرایه براساس مکانشان•
26
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
𝑖
2 𝑖 2 𝑖+1
𝑎
𝑏 𝑐
𝑑
![Page 27: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/27.jpg)
آرایه
تعداد خانه های مورد نیاز برای درخت•← پر •اریب•
← چپ •← راست •
27
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
2
4
1
8
3
7
1
15
![Page 28: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/28.jpg)
آرایه
هدر رفتن حافظه•اریب•
← چپ •← راست •
28
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
![Page 29: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/29.jpg)
لیست پیوندی
29
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
𝑑𝑎𝑡𝑎
𝑙𝑒𝑓𝑡𝑐 h 𝑖𝑙𝑑𝑟𝑖𝑔h 𝑡𝑐 h 𝑖𝑙𝑑
left_child data right_child
![Page 30: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/30.jpg)
لیست پیوندی
30
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
![Page 31: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/31.jpg)
پیمایشدرخت دودویی
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
31
![Page 32: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/32.jpg)
تعریف پیمایش درختمی خواهیم با حرکت روی یالهای یک درخت، همه •
گره های آن را یک بار مالقات کنیم.
پیمایش سطحی•پیمایش عمقی•
Preorderپیش ترتیب، •
Inorderمیان ترتیب، •
Prostorderپس ترتیب، •
32
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
![Page 33: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/33.jpg)
پيمايش درخت دودوييطي كردن هر گره درخت يك و فقط يك بار• تركيب مختلف كنار هم قرار دادن 6•
r(root),L(Left),R(Right):•(rLR,rRL,LrR,LRr,RrL,RLr)
اگر زير درخت چپ قبل از زيردرخت راست •پيمايش شود،
حالت مختلف ايجاد مي شود:3•
33
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
L R
r
L R
r
L R
r
rLRpreorder
1
2 3 1
2
3 1 2
3
LrRinorder
LRrpostorder
![Page 34: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/34.jpg)
پیمایش سطحیحرکت از باال به پایین•حرکت از چپ به راست•
پیاده سازی به کمک صف•
34
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
−𝒂×𝒃𝒄
![Page 35: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/35.jpg)
پیمایش سطحی
35
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
void level_order(tree_pointer ptr){ int front = rear = 0; tree_pointer queue[MAX_QUEUE_SIZE]; if (!ptr) return; /* empty tree */ addq(front, &rear, ptr); for (;;) { ptr = deleteq(&front, rear); if (ptr) { printf(ptr.data); if (ptr.left_child) addq(front, &rear, ptr.left_child); if (ptr.right_child) addq(front, &rear, ptr.right_child); } else break; }}
![Page 36: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/36.jpg)
Preorderپیمایش
ریشهمالقات • چپ← پیمایش اگر زیر درخت چپ داشتیم •
Preorderبروش راست← پیمایش اگر زیر درخت راست داشتیم •
Preorderبروش
36
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
𝟏𝟐𝟑𝟒𝟓𝒐𝒓 <𝒂𝒃<𝒄 𝒅
راست ترین برگریشه
![Page 37: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/37.jpg)
Preorderپیمایش
الگوریتم•بازگشتی•غیر بازگشتی به کمک پشته•
•Push به تعداد فرزندان راست•Pop به تعداد فرزندان راست
37
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
![Page 38: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/38.jpg)
Inorderپیمایش
چپ← پیمایش اگر زیر درخت چپ داشتیم •Inorderبروش
ریشهمالقات • راست← پیمایش اگر زیر درخت راست داشتیم •
Inorderبروش
38
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
𝟏𝟒𝟑𝟓𝟐𝒂<𝒃𝒐𝒓 𝒄<𝒅
راست ترین گره در امتداد ریشه
چپ ترین گره در امتداد ریشه
![Page 39: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/39.jpg)
Postorderپیمایش
چپ← پیمایش اگر زیر درخت چپ داشتیم •Postorderبروش
راست← پیمایش اگر زیر درخت راست داشتیم •Postorderبروش
ریشهمالقات •
39
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
𝟒𝟓𝟑𝟐𝟏𝒂𝒃<𝒄𝒅<𝒐𝒓
چپ ترین برگریشه
![Page 40: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/40.jpg)
نکتهترتیب مالقات برگ ها•
پیمایش یکسان3در هر •همواره از چپ به راست•
40
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
𝒐𝒓 <𝒂𝒃<𝒄 𝒅𝒂<𝒃𝒐𝒓 𝒄<𝒅𝒂𝒃<𝒄𝒅<𝒐𝒓
PreorderInorderPostorder
![Page 41: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/41.jpg)
توابع پيمايش درخت
41
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
void inorder (tree_pointer ptr){ if (ptr) { inorder(ptr.left_child); printf(ptr.data); inorder(ptr.right_child); }}
void preorder (tree_pointer ptr){ if (ptr) { printf(ptr.data); preorder(ptr.left_child); preorder(ptr.right_child); }}
![Page 42: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/42.jpg)
inorderپيمايش غير بازگشتي
42
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
void iter_inorder(tree_pointer node){ int top = -1; /* initialize stack */ tree_pointer stack[MAX_STACK_SIZE]; for (;;) { for (; node; node = node.left_child) add(&top, node); // add to stack node = delete(&top); // delete from stack if (!node) break; // empty stack */ printf(node.data); node = node.right_child; }}
![Page 43: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/43.jpg)
ساخت درخت دودویی به کمک پیمایش های آن
مثال•
• Preorder a b c d e f g h• Inorder b c a e d g f h
43
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
![Page 44: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/44.jpg)
درخت عبارت
44
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
+
*
A
*
/
E
D
C
B
inorder traversalA / B * C * D + Einfix expression
preorder traversal+ * * / A B C D Eprefix expression
postorder traversalA B / C * D * E +postfix expression
![Page 45: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/45.jpg)
سوالبنويسuيد کuه يuک درخت swaptreeالگuوريتمي بuه نuام •
و هuاي چپ بچuه جuاي و کنuد دريuافت را دودويي راست هر گره را عوض کند.
الگuوريتمي بuراي شuمارش تعuداد گuره هuاي بuرگ | •گuره هuاي غuير بuرگ | کuل گuره هuا در يuک درخت
دودويي بنويسيد.
الگuوريتمي بuراي حuذف تمuام گuره هuا در يuک درخت •دودويي بنويسيد. 45
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
![Page 46: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/46.jpg)
عملیاتدرخت دودویی
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
46
![Page 47: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/47.jpg)
کپی درخت دودوییدرخت پيمايش پس ترتيب مي توانيم الگوريتم •
دودويي را اندکي تغيير دهيم تا براي کپي درخت به کار رود.
برابرای دو درخت•ترتیب و ساختار گره ها یکسان•داده های گره ها یکسان•
47
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
![Page 48: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/48.jpg)
محاسبه عبارات گزاره اي x1 (x2 ¬x3)
• x1 and x3 =false, x2 = true
• false (true ¬false) = false true = true
پيمايش پس ترتيب:•براي ارزيابي هر گره بايد قبال آرگومان هاي آ ن را •
محاسبه کرده باشيم.
48
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
![Page 49: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/49.jpg)
محاسبه عبارات گزاره اي
49
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
(x1 ¬x2) (¬ x1 x3) ¬x3
X3X1
X2 X1
X3
data
value
![Page 50: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/50.jpg)
درخت نخی دودویی
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
50
![Page 51: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/51.jpg)
درخت نخینخ کشي کردن•
عيب درختهاي دودويي باال: تعداد زيادي از •است NULLاشاره گرها
nتعداد گره
n-1تعداد اشاره گر غير صفر
2nتعداد کل اشاره گر ها
n+1تعداد اشاره گر صفر
راهکار: از اشاره گرهاي تهی براي اشاره به •گره هاي ديگر درخت استفاده کنيم. به چنين
گويند. نخاشاره گرهايي 51
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
![Page 52: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/52.jpg)
درخت دودويي نخ كشي شده(Threaded)از اشاره گرهاي خالي براي اشاره به عنصر قبل •
استفاده مي شود. inorderو عنصر بعد در ترتيب
52
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
A
B C
GE
I
D
H
F
root
inorder traversal:H, D, I, B, E, A, F, C, G
dangling
dangling
![Page 53: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/53.jpg)
ساختمان داده براي گره هاي درخت نخ كشي شده
53
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
TRUE FALSE
left_thread left_child data right_child right_thread
FALSE: childTRUE: thread
![Page 54: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/54.jpg)
درخت نخ كشي شده: مثال
54
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
f f--
f fA
f fCf fB
t tE t tF t tGf fD
t tIt tH
root
![Page 55: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/55.jpg)
پيمايش ميان ترتيببا استفاده از نخ کشيها مي توان پيمايش ميان •
ترتيب را بدون استفاده از پشته انجام داد.باشد آنگاه عضو بعد ptr.right_thread = TRUE- اگر 1
ptr . right_childدر روش ميان ترتيب ptrازاست.
در روش ptr- در غير اينصورت عضو بعد از 2مسيري از اشاره ميان ترتيب با دنبال کردن
به دست ptrگرهاي بچه چپ از بچه راست برسيم. left_thread = TRUEمي ايد تا به گره اي با
55
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
![Page 56: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/56.jpg)
(Successorپيدا کردن عضو بعدي )
56
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
threaded_pointer insucc(threaded_pointer tree){threaded_pointer temp;temp = tree.right_child;if (!tree.right_thread)
while (!temp.left_thread) temp = temp.left_child;
return temp;}
tree
temp
![Page 57: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/57.jpg)
پيمايش ميان ترتيب
57
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
void tinorder(threaded_pointer tree){threaded_pointer temp = tree;for (;;) {
temp = insucc(temp);if (temp==tree)
break;printf(temp.data);
}}
![Page 58: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/58.jpg)
اضافه کردن گره
يک راستبچه اضافه کردن يک گره به عنوان •والد گره
58
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
X
A
B
root
child
parent A
B childparent
D
E Fحالت اول:
Bزير درخت راست خالي باشد حالت دوم:
زير درخت راست Bخالي نباشد
X
![Page 59: ساختمان داده درختها](https://reader033.fdocuments.net/reader033/viewer/2022061610/568150b1550346895dbecdb6/html5/thumbnails/59.jpg)
اضافه کردن گره
59
نقا
ه د
نسی
حی
سدهن
مو
ی فن
ه دکش
اند
م
ج
void insert_right(parent, child){threaded_pointer temp;child.right_child = parent.right_child;child.right_thread = parent.right_thread;child.left_child = parent;child.left_thread = TRUE;parent.right_child = child;parent.right_thread = FALSE;If(!child.right_thread){
temp = insucc(child);temp.left_child = child;
}}
X
A
B
root
child
parent
A
B childparent
D
E Fsuccessor
temp
حالت دومحالت اول
X