רקורסיה - הכנסה לעץ, ועדכון - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

רקורסיה - הכנסה לעץ, ועדכון


נגה

Recommended Posts

אני משתמשת בפונקציה רקורסיבית המכניסה NODE חדש לעץ.

אני רוצה לאחר ההכנסה לעדכן את כל הענף של הNODE הזה שיש לו NODE חדש.

איך עושים את זה?

איך אני "חוזרת אחורה בענף?"

הקוד להכנסה:


function setChildren(parentI, treeArr, newNode)
{
var type = typeof treeArr


if (type == "object") {
for (var key in treeArr) {




if (treeArr[key].id == parentI) {




treeArr[key].children.push(newNode);

return key;
}


setChildren(parentI, treeArr[key].children, newNode);
}
}




return null;
}

קישור לתוכן
שתף באתרים אחרים

דבר ראשון, מה זה ענף? עד כמה שידוע לי אין כזה מושג. האם הכוונה למסלול מהשורש עד לצומת החדש (ה-node שהרגע הוספת)?

(למשל כאן אם הצומת החדש הוא 6 אז המסלול מהשורש אליו הוא 8 ואז 3 ואז 6.)

אם זאת הכוונה אז את יכולה:

1. לכתוב פונקציה שמקבלת צומת ומה שהיא עושה זה לעדכן את האב שלו (אם קיים). לאחר העדכון היא תקרא לעצמה, אבל הפעם הפרמטר יהיה האב. זה הכל.

או:

2. לעשות לולאת for על משתנה זמני שבהתחלה יחזיק את האב של הצומת שהרגע הוספת (או את עצמו, תלוי בדרישות שלך). בכל איטרציה יהיה עדכון של צומת, ואז קידום של המשתנה הזמני לאב שלו (עד שמנסים לקדם לאב של השורש).

קישור לתוכן
שתף באתרים אחרים

  • 3 שבועות מאוחר יותר...
  • 2 שבועות מאוחר יותר...

תוסיפי את הקוד שמבצע את עדכון הנדרש לאחר השורה של הקריאה הרקורסיבית. ועכשיו עם קצת יותר נימוק- תחשבי על זה כך: אנחנו יושבים מספר אנשים בשורה (כל אחד מייצג קריאה רקורסיבית אחת). אני ראשון ואני מעביר לך פתק עם ההוראות הבאות- אני צריך 6 ביצים. אם אין לך תעבירי את הפתק לבא בתור עם בקשה ל כמה שביקשתי פחות כמה שיש לך. אם נניח יש לך רק 2 ביצים את מחכה ל 4 ביצים שיחזרו מזה שממנו ביקשת. אחרי שהוא הביא לך את יתר 4 הביצים (שאולי היו לו ואולי העביר את הפתק הלאה לפי ההוראות) את מצרפת אותן ל 2 הביצים שהיו לך ומחזירה לי 6. באף שלב אף אחד לא ידע כמה ביצים היו לך. המידע הזה שמור אצלך למרות שביצעת בדיוק את ההוראות שבפתק כמו כל השאר. וחזרה לתכנית שלך- בכל קריאה רקורסיבית יש עותק של המשתנה treeArr עם ערך אחר, ועל עותק זה את מבצעת את העדכון, כך שבפועל הקוד לעדכון יהיה זהה בכל אחד מהצמתים בדרך. אני מקווה שההסבר שלי מספיק ברור כי נראה לי שזו יותר בעיה בהבנה של מנגנון הרקורסיה מאשר בעיית קוד נקודתית בפונקציה זו.

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...