20 likes | 303 Views
מעבר BFS על עץ בינארי בעזרת תור. העץ ממומש ע"י מצביעים left ו- right לילדים. root מצביע לשורש העץ איבר בתור: מצביע לצומת בעץ. Queue Q Node v Q.MakeEmpty Q.Enqueue(root) While (!Q.isempty) { v = Q.dequeue visit(v) if v has a left child Q.enqueue(v left)
E N D
מעבר BFS על עץ בינארי בעזרת תור העץ ממומש ע"י מצביעים left ו- right לילדים. root מצביע לשורש העץ איבר בתור: מצביע לצומת בעץ Queue Q Node v Q.MakeEmpty Q.Enqueue(root) While (!Q.isempty) { v = Q.dequeue visit(v) if v has a left child Q.enqueue(vleft) if v has a right child Q.enqueue(vright) }
הוכחת נכונות יהיה n מספר הקדקודים בעץ. נתייחס לקדקודי העץ לפי מספור ה- BFS שלהם. טענה: בתחילת האיטרציה ה- i, 1 ≤ i ≤ n+1 מתקיימת האינווריאנטה הבאה: • כבר ביקרנו לפי סדר BFS בקדקודים 1..i-1 ורק בהם. • הקדקודים בתור בשלב זה הם לפי סדר BFS מ- i (שנמצא בראש התור) עד ילדיו של i (לא כולל אותם). אם i = n+1 אז התור ריק. תוצאה: האלגוריתם מבקר לפי סדר BFS בכל הקדקודים.