1 / 59

ساختمان داده درخت‌ها

ساختمان داده درخت‌ها. حسین دهقان دانشکده فنی و مهندسی جم. تعاریف. تعریف درخت. تعريف: درخت مجموعه اي متناهي و غير تهي از يک يا چند گره است به طوريکه: داراي گره خاصي به نام ريشه باشد. گره‌های دیگر زیر درختان ریشه مجموعه مجزا T 1 ,…, T n که هر يک از اين مجموعه ها خود يک درخت هستند .

naiara
Download Presentation

ساختمان داده درخت‌ها

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ساختمان دادهدرخت‌ها حسین دهقان دانشکده فنی و مهندسی جم

  2. تعاریف حسین دهقان دانشکده فنی و مهندسی جم

  3. تعریف درخت • تعريف: درخت مجموعه اي متناهي و غير تهي از يک يا چند گره است به طوريکه: • داراي گره خاصي به نام ريشه باشد. • گره‌های دیگر زیر درختان ریشه • مجموعه مجزا T1,…,Tnکه هر يک از اين مجموعه ها خود يک درخت هستند. • یک گراف غیر جهت دار و بدون دور حسین دهقان دانشکده فنی و مهندسی جم

  4. ریشه، برگ، گره و یال ریشه برگ گره یال تعداد = e 12 تعداد = n 13 حسین دهقان دانشکده فنی و مهندسی جم

  5. تعاریف • ریشه • گره بدون پدر (a) • برگ • گره بدون فرزند|بدون زیر درخت (b, d, f, g, j, k, l, m) • گره داخلی • گره غیر برگ (a, c, e, h, i) • گره jو k • فرزندان h • گره‌های همزاد، هم‌نیا، برادر یا sibling حسین دهقان دانشکده فنی و مهندسی جم

  6. تعاریف • درجه • گره: تعداد زیر درختان گره • درخت: ماکزیمم درجه گره‌های درخت • اجداد گره • گره‌های موجود در مسیر طی شده تا ریشه • m← i, e, a • سطح (عمق) یک گره • طول مسیر از ریشه به آن گره • a← 1 و h← 3 حسین دهقان دانشکده فنی و مهندسی جم

  7. تعاریف • ارتفاع (عمق) درخت • بیشترین سطح گره‌ها • 4 • سوال • سطحfبرابر ؟ است. • عمق (ارتفاع) درخت برابر ؟ است. • درجه نود cبرابر ؟ است. • درجه درخت برابر ؟ است. • اجدادcبرابر ?است. • نسل هايhبرابر?است. حسین دهقان دانشکده فنی و مهندسی جم

  8. نمایش درخت عمومی حسین دهقان دانشکده فنی و مهندسی جم

  9. پرانتزگذاری • ابتدا ریشه • اطلاعات فرزندان ریشه در پرانتز • اطلاعات فرزندان از چپ به راست (a(b), (c(f, g, h(j, k))), (d), (e(i(l, m)))) حسین دهقان دانشکده فنی و مهندسی جم

  10. آرایه • ذخیره • مقدار هر گره (element) • شماره درایه پدر هر عنصر حسین دهقان دانشکده فنی و مهندسی جم

  11. لیست پیوندی • درخت روبرو را مي توان در قالب ليست به صورت زير نشان داد (A(B(E(K ،L)،F)،C(G)،D(H(M)،I،J))) حسین دهقان دانشکده فنی و مهندسی جم

  12. فرزند چپ، همزاد راست • هر گره حداکثر درای • 1 فرزند چپ • 1 همزاد راست • تبدیل درخت عمومی به درخت دودویی حسین دهقان دانشکده فنی و مهندسی جم

  13. درخت دودویی حسین دهقان دانشکده فنی و مهندسی جم

  14. تعریف • درخت k تایی • درختی که بیشینه تعداد فرزندان یک گره k باشد. • درخت دودویی • حداکثر تعداد فرزندان هر گره = 2 • تفاوت با درخت عادی • می‌تواند دارای صفر گره باشد ! • ترتیب فرزندان اهمیت دارد. حسین دهقان دانشکده فنی و مهندسی جم

  15. تبدیل درخت عمومی به دودویی • هر درختي را مي توان به فرم درخت دودويي در آورد. • با بازنمايي بچه چپ-همزاد راست • در درختهاي دودويي بين زير درخت چپ و راست تمايز قائل مي‌شويم. حسین دهقان دانشکده فنی و مهندسی جم

  16. انواع درخت • پر • همه گره‌ها بجز سطح آخر 2 فرزند دارند. • تعداد گره سطح i← • تعداد کل گره‌ها ← • تعداد کل برگ‌ها ← • تعداد گره‌های داخلی ← حسین دهقان دانشکده فنی و مهندسی جم

  17. انواع درخت • کامل • تا ارتفاع h-1 پر • برگها در ارتفاع hاز چپ به راست پر می‌شوند. • تعداد گره‌ها حسین دهقان دانشکده فنی و مهندسی جم

  18. انواع درخت • اریب • درجه رئوس بجز آخری برابر 1 • تعداد گره‌ تک فرزندی • n-1 • تعداد برگ‌ها • 1 • ارتفاع • h = n حسین دهقان دانشکده فنی و مهندسی جم

  19. انواع درخت • متوازن • اختلاف سطح برگها 0 یا 1 • برگها در سطح hیا h-1 • کاملا متوازن • تمام برگها در یک سطح حسین دهقان دانشکده فنی و مهندسی جم

  20. خصوصیاتدرخت دودویی حسین دهقان دانشکده فنی و مهندسی جم

  21. تعداد یالها • : تعداد گره های درجه 0 یا تعداد برگها • : تعداد گره های درجه 1 • : تعداد گره های درجه 2 حسین دهقان دانشکده فنی و مهندسی جم

  22. تعداد برگ‌ها • در درخت کامل و پر ← درخت پر حسین دهقان دانشکده فنی و مهندسی جم

  23. عمق، تعداد گره • تعداد گره‌ها درخت پر درخت پر درخت پر یا کامل درخت اریب حسین دهقان دانشکده فنی و مهندسی جم درخت اریب

  24. تعداد درخت دودویی مختلف • تعداد درخت‌های مختلف که با nگره می‌توان ساخت: • تعداد درخت‌های دودویی کامل = تعداد برگهای ارتفاع h= • تعداد درخت‌های متفاوت با n گره = حسین دهقان دانشکده فنی و مهندسی جم

  25. نمایشدرخت دودویی حسین دهقان دانشکده فنی و مهندسی جم

  26. آریه • شماره گذاری گره‌ها به صورت زیر • قراردادن عناصر در آرایه براساس مکانشان حسین دهقان دانشکده فنی و مهندسی جم

  27. آرایه • تعداد خانه‌های مورد نیاز برای درخت • پر ← • اریب • چپ← • راست← 1 1 حسین دهقان دانشکده فنی و مهندسی جم 2 3 4 7 8 15

  28. آرایه • هدر رفتن حافظه • اریب • چپ ← • راست ← حسین دهقان دانشکده فنی و مهندسی جم

  29. لیست پیوندی حسین دهقان دانشکده فنی و مهندسی جم

  30. لیست پیوندی حسین دهقان دانشکده فنی و مهندسی جم

  31. پیمایشدرخت دودویی حسین دهقان دانشکده فنی و مهندسی جم

  32. تعریف پیمایش درخت • می‌خواهیم با حرکت روی یالهای یک درخت، همه گره‌های آن را یک بار ملاقات کنیم. • پیمایش سطحی • پیمایش عمقی • پیش ترتیب، Preorder • میان ترتیب، Inorder • پس ترتیب، Prostorder حسین دهقان دانشکده فنی و مهندسی جم

  33. پيمايش درخت دودويي • طي كردن هر گره درخت يك و فقط يك بار • 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

  34. پیمایش سطحی • حرکت از بالا به پایین • حرکت از چپ به راست • پیاده‌سازی به کمک صف حسین دهقان دانشکده فنی و مهندسی جم

  35. پیمایش سطحی 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; } } حسین دهقان دانشکده فنی و مهندسی جم

  36. پیمایش Preorder • ملاقات ریشه • اگر زیر درخت چپ داشتیم ← پیمایش چپ بروش Preorder • اگر زیر درخت راست داشتیم ← پیمایش راست بروش Preorder حسین دهقان دانشکده فنی و مهندسی جم راست ترین برگ ریشه

  37. پیمایش Preorder • الگوریتم • بازگشتی • غیر بازگشتی به کمک پشته • Pushبه تعداد فرزندان راست • Popبه تعداد فرزندان راست حسین دهقان دانشکده فنی و مهندسی جم

  38. پیمایش Inorder • اگر زیر درخت چپ داشتیم ← پیمایش چپ بروش Inorder • ملاقات ریشه • اگر زیر درخت راست داشتیم ← پیمایش راست بروش Inorder حسین دهقان دانشکده فنی و مهندسی جم چپ‌ترین گره در امتداد ریشه راست‌ترین گره در امتداد ریشه

  39. پیمایش Postorder • اگر زیر درخت چپ داشتیم ← پیمایش چپ بروش Postorder • اگر زیر درخت راست داشتیم ← پیمایش راست بروش Postorder • ملاقات ریشه حسین دهقان دانشکده فنی و مهندسی جم چپ‌ترین برگ ریشه

  40. نکته • ترتیب ملاقات برگ ها • در هر 3 پیمایش یکسان • همواره از چپ به راست حسین دهقان دانشکده فنی و مهندسی جم Preorder Inorder Postorder

  41. توابع پيمايش درخت 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); } } حسین دهقان دانشکده فنی و مهندسی جم

  42. پيمايش غير بازگشتي 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; } } حسین دهقان دانشکده فنی و مهندسی جم

  43. ساخت درخت دودویی به کمک پیمایش‌های آن • مثال • Preorder a b c d e f g h • Inorder b c a e d g f h حسین دهقان دانشکده فنی و مهندسی جم

  44. + * 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 حسین دهقان دانشکده فنی و مهندسی جم

  45. سوال • الگوريتمي به نام swaptreeبنويسيد که يک درخت دودويي را دريافت کند و جاي بچه هاي چپ و راست هر گره را عوض کند. • الگوريتمي براي شمارش تعداد گره هاي برگ | گره هاي غير برگ | کل گره ها در يک درخت دودويي بنويسيد. • الگوريتمي براي حذف تمام گره ها در يک درخت دودويي بنويسيد. حسین دهقان دانشکده فنی و مهندسی جم

  46. عملیاتدرخت دودویی حسین دهقان دانشکده فنی و مهندسی جم

  47. کپی درخت دودویی • مي‌توانيم الگوريتم پيمايش پس ترتيب درخت دودويي را اندکي تغيير دهيم تا براي کپي درخت به کار رود. • برابرای دو درخت • ترتیب و ساختار گره‌ها یکسان • داده‌‌های گره‌‌ها یکسان حسین دهقان دانشکده فنی و مهندسی جم

  48. محاسبه عبارات گزاره اي x1  (x2  ¬x3) • x1 and x3 =false, x2 = true • false (true  ¬false) = false true = true • پيمايش پس ترتيب: • براي ارزيابي هر گره بايد قبلا آرگومان‌هاي آ‌ن را محاسبه کرده باشيم. حسین دهقان دانشکده فنی و مهندسی جم

  49.   data   X3 value   X3 X1 X2 X1 محاسبه عبارات گزاره اي (x1  ¬x2)(¬ x1  x3)¬x3 حسین دهقان دانشکده فنی و مهندسی جم

  50. درخت نخی دودویی حسین دهقان دانشکده فنی و مهندسی جم

More Related