910 likes | 1.97k Views
ساختمان داده درختها. حسین دهقان دانشکده فنی و مهندسی جم. تعاریف. تعریف درخت. تعريف: درخت مجموعه اي متناهي و غير تهي از يک يا چند گره است به طوريکه: داراي گره خاصي به نام ريشه باشد. گرههای دیگر زیر درختان ریشه مجموعه مجزا T 1 ,…, T n که هر يک از اين مجموعه ها خود يک درخت هستند .
E N D
ساختمان دادهدرختها حسین دهقان دانشکده فنی و مهندسی جم
تعاریف حسین دهقان دانشکده فنی و مهندسی جم
تعریف درخت • تعريف: درخت مجموعه اي متناهي و غير تهي از يک يا چند گره است به طوريکه: • داراي گره خاصي به نام ريشه باشد. • گرههای دیگر زیر درختان ریشه • مجموعه مجزا T1,…,Tnکه هر يک از اين مجموعه ها خود يک درخت هستند. • یک گراف غیر جهت دار و بدون دور حسین دهقان دانشکده فنی و مهندسی جم
ریشه، برگ، گره و یال ریشه برگ گره یال تعداد = e 12 تعداد = n 13 حسین دهقان دانشکده فنی و مهندسی جم
تعاریف • ریشه • گره بدون پدر (a) • برگ • گره بدون فرزند|بدون زیر درخت (b, d, f, g, j, k, l, m) • گره داخلی • گره غیر برگ (a, c, e, h, i) • گره jو k • فرزندان h • گرههای همزاد، همنیا، برادر یا sibling حسین دهقان دانشکده فنی و مهندسی جم
تعاریف • درجه • گره: تعداد زیر درختان گره • درخت: ماکزیمم درجه گرههای درخت • اجداد گره • گرههای موجود در مسیر طی شده تا ریشه • m← i, e, a • سطح (عمق) یک گره • طول مسیر از ریشه به آن گره • a← 1 و h← 3 حسین دهقان دانشکده فنی و مهندسی جم
تعاریف • ارتفاع (عمق) درخت • بیشترین سطح گرهها • 4 • سوال • سطحfبرابر ؟ است. • عمق (ارتفاع) درخت برابر ؟ است. • درجه نود cبرابر ؟ است. • درجه درخت برابر ؟ است. • اجدادcبرابر ?است. • نسل هايhبرابر?است. حسین دهقان دانشکده فنی و مهندسی جم
نمایش درخت عمومی حسین دهقان دانشکده فنی و مهندسی جم
پرانتزگذاری • ابتدا ریشه • اطلاعات فرزندان ریشه در پرانتز • اطلاعات فرزندان از چپ به راست (a(b), (c(f, g, h(j, k))), (d), (e(i(l, m)))) حسین دهقان دانشکده فنی و مهندسی جم
آرایه • ذخیره • مقدار هر گره (element) • شماره درایه پدر هر عنصر حسین دهقان دانشکده فنی و مهندسی جم
لیست پیوندی • درخت روبرو را مي توان در قالب ليست به صورت زير نشان داد (A(B(E(K ،L)،F)،C(G)،D(H(M)،I،J))) حسین دهقان دانشکده فنی و مهندسی جم
فرزند چپ، همزاد راست • هر گره حداکثر درای • 1 فرزند چپ • 1 همزاد راست • تبدیل درخت عمومی به درخت دودویی حسین دهقان دانشکده فنی و مهندسی جم
درخت دودویی حسین دهقان دانشکده فنی و مهندسی جم
تعریف • درخت k تایی • درختی که بیشینه تعداد فرزندان یک گره k باشد. • درخت دودویی • حداکثر تعداد فرزندان هر گره = 2 • تفاوت با درخت عادی • میتواند دارای صفر گره باشد ! • ترتیب فرزندان اهمیت دارد. حسین دهقان دانشکده فنی و مهندسی جم
تبدیل درخت عمومی به دودویی • هر درختي را مي توان به فرم درخت دودويي در آورد. • با بازنمايي بچه چپ-همزاد راست • در درختهاي دودويي بين زير درخت چپ و راست تمايز قائل ميشويم. حسین دهقان دانشکده فنی و مهندسی جم
انواع درخت • پر • همه گرهها بجز سطح آخر 2 فرزند دارند. • تعداد گره سطح i← • تعداد کل گرهها ← • تعداد کل برگها ← • تعداد گرههای داخلی ← حسین دهقان دانشکده فنی و مهندسی جم
انواع درخت • کامل • تا ارتفاع h-1 پر • برگها در ارتفاع hاز چپ به راست پر میشوند. • تعداد گرهها حسین دهقان دانشکده فنی و مهندسی جم
انواع درخت • اریب • درجه رئوس بجز آخری برابر 1 • تعداد گره تک فرزندی • n-1 • تعداد برگها • 1 • ارتفاع • h = n حسین دهقان دانشکده فنی و مهندسی جم
انواع درخت • متوازن • اختلاف سطح برگها 0 یا 1 • برگها در سطح hیا h-1 • کاملا متوازن • تمام برگها در یک سطح حسین دهقان دانشکده فنی و مهندسی جم
خصوصیاتدرخت دودویی حسین دهقان دانشکده فنی و مهندسی جم
تعداد یالها • : تعداد گره های درجه 0 یا تعداد برگها • : تعداد گره های درجه 1 • : تعداد گره های درجه 2 حسین دهقان دانشکده فنی و مهندسی جم
تعداد برگها • در درخت کامل و پر ← درخت پر حسین دهقان دانشکده فنی و مهندسی جم
عمق، تعداد گره • تعداد گرهها درخت پر درخت پر درخت پر یا کامل درخت اریب حسین دهقان دانشکده فنی و مهندسی جم درخت اریب
تعداد درخت دودویی مختلف • تعداد درختهای مختلف که با nگره میتوان ساخت: • تعداد درختهای دودویی کامل = تعداد برگهای ارتفاع h= • تعداد درختهای متفاوت با n گره = حسین دهقان دانشکده فنی و مهندسی جم
نمایشدرخت دودویی حسین دهقان دانشکده فنی و مهندسی جم
آریه • شماره گذاری گرهها به صورت زیر • قراردادن عناصر در آرایه براساس مکانشان حسین دهقان دانشکده فنی و مهندسی جم
آرایه • تعداد خانههای مورد نیاز برای درخت • پر ← • اریب • چپ← • راست← 1 1 حسین دهقان دانشکده فنی و مهندسی جم 2 3 4 7 8 15
آرایه • هدر رفتن حافظه • اریب • چپ ← • راست ← حسین دهقان دانشکده فنی و مهندسی جم
لیست پیوندی حسین دهقان دانشکده فنی و مهندسی جم
لیست پیوندی حسین دهقان دانشکده فنی و مهندسی جم
پیمایشدرخت دودویی حسین دهقان دانشکده فنی و مهندسی جم
تعریف پیمایش درخت • میخواهیم با حرکت روی یالهای یک درخت، همه گرههای آن را یک بار ملاقات کنیم. • پیمایش سطحی • پیمایش عمقی • پیش ترتیب، Preorder • میان ترتیب، Inorder • پس ترتیب، Prostorder حسین دهقان دانشکده فنی و مهندسی جم
پيمايش درخت دودويي • طي كردن هر گره درخت يك و فقط يك بار • 6 تركيب مختلف كنار هم قرار دادن r(root),L(Left),R(Right): • (rLR,rRL,LrR,LRr,RrL,RLr) • اگر زير درخت چپ قبل از زيردرخت راست پيمايش شود، • 3 حالت مختلف ايجاد مي شود: حسین دهقان دانشکده فنی و مهندسی جم r r r 3 1 2 3 1 2 1 2 3 L R L R L R rLR preorder LrR inorder LRr postorder
پیمایش سطحی • حرکت از بالا به پایین • حرکت از چپ به راست • پیادهسازی به کمک صف حسین دهقان دانشکده فنی و مهندسی جم
پیمایش سطحی void level_order(tree_pointerptr) { 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; } } حسین دهقان دانشکده فنی و مهندسی جم
پیمایش Preorder • ملاقات ریشه • اگر زیر درخت چپ داشتیم ← پیمایش چپ بروش Preorder • اگر زیر درخت راست داشتیم ← پیمایش راست بروش Preorder حسین دهقان دانشکده فنی و مهندسی جم راست ترین برگ ریشه
پیمایش Preorder • الگوریتم • بازگشتی • غیر بازگشتی به کمک پشته • Pushبه تعداد فرزندان راست • Popبه تعداد فرزندان راست حسین دهقان دانشکده فنی و مهندسی جم
پیمایش Inorder • اگر زیر درخت چپ داشتیم ← پیمایش چپ بروش Inorder • ملاقات ریشه • اگر زیر درخت راست داشتیم ← پیمایش راست بروش Inorder حسین دهقان دانشکده فنی و مهندسی جم چپترین گره در امتداد ریشه راستترین گره در امتداد ریشه
پیمایش Postorder • اگر زیر درخت چپ داشتیم ← پیمایش چپ بروش Postorder • اگر زیر درخت راست داشتیم ← پیمایش راست بروش Postorder • ملاقات ریشه حسین دهقان دانشکده فنی و مهندسی جم چپترین برگ ریشه
نکته • ترتیب ملاقات برگ ها • در هر 3 پیمایش یکسان • همواره از چپ به راست حسین دهقان دانشکده فنی و مهندسی جم Preorder Inorder Postorder
توابع پيمايش درخت void inorder (tree_pointerptr) { if (ptr) { inorder(ptr.left_child); printf(ptr.data); inorder(ptr.right_child); } } void preorder (tree_pointerptr) { if (ptr) { printf(ptr.data); preorder(ptr.left_child); preorder(ptr.right_child); } } حسین دهقان دانشکده فنی و مهندسی جم
پيمايش غير بازگشتي inorder void iter_inorder(tree_pointer node) { inttop = -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; } } حسین دهقان دانشکده فنی و مهندسی جم
ساخت درخت دودویی به کمک پیمایشهای آن • مثال • Preorder a b c d e f g h • Inorder b c a e d g f h حسین دهقان دانشکده فنی و مهندسی جم
+ * E * D C / B A درخت عبارت inorder traversal A / B * C * D + E infix expression preorder traversal + * * / A B C D E prefixexpression postorder traversal A B / C * D * E + postfixexpression حسین دهقان دانشکده فنی و مهندسی جم
سوال • الگوريتمي به نام swaptreeبنويسيد که يک درخت دودويي را دريافت کند و جاي بچه هاي چپ و راست هر گره را عوض کند. • الگوريتمي براي شمارش تعداد گره هاي برگ | گره هاي غير برگ | کل گره ها در يک درخت دودويي بنويسيد. • الگوريتمي براي حذف تمام گره ها در يک درخت دودويي بنويسيد. حسین دهقان دانشکده فنی و مهندسی جم
عملیاتدرخت دودویی حسین دهقان دانشکده فنی و مهندسی جم
کپی درخت دودویی • ميتوانيم الگوريتم پيمايش پس ترتيب درخت دودويي را اندکي تغيير دهيم تا براي کپي درخت به کار رود. • برابرای دو درخت • ترتیب و ساختار گرهها یکسان • دادههای گرهها یکسان حسین دهقان دانشکده فنی و مهندسی جم
محاسبه عبارات گزاره اي x1 (x2 ¬x3) • x1 and x3 =false, x2 = true • false (true ¬false) = false true = true • پيمايش پس ترتيب: • براي ارزيابي هر گره بايد قبلا آرگومانهاي آن را محاسبه کرده باشيم. حسین دهقان دانشکده فنی و مهندسی جم
data X3 value X3 X1 X2 X1 محاسبه عبارات گزاره اي (x1 ¬x2)(¬ x1 x3)¬x3 حسین دهقان دانشکده فنی و مهندسی جم
درخت نخی دودویی حسین دهقان دانشکده فنی و مهندسی جم