שאלה ראשונה
כתוב פונקציה המקבלת שורש של עץ בינארי (BinNode) מטיפוס מספר שלם ומחזירה את סכום העץ.
פתרון בשפת C#
public static int Sum (BinNode<int> root)
{
if(root==null)
return 0;
return root.GetValue() + Sum(root.GetLeft()) + Sum(root.GetRight());
}
שאלה שנייה
כתוב פונקציה המקבלת שורש של עץ בינארי (BinNode) מטיפוס מספר שלם ומחזירה כמה צמתים בעץ בעלי ערך זוגי.
public static int Sum (BinNode<int> root)
{
if(root==null)
return 0;
if(root.GetValue()%2==0)
return 1 + Sum(root.GetLeft()) + Sum(root.GetRight());
return Sum(root.GetLeft()) + Sum(root.GetRight());
}
שאלה שלישית
כתבו פונקציה המקבלת שורש של עץ בינארי (root) מטיפוס מספר שלם ומחזירה כמה רמות יש בעץ. (הרמה המקסימלית כמובן).
public static int Level (BinNode<int> root)
{
if (root==null)
return 0;
return 1+Math.Max( (Level(root.GetLeft()) , (Level(root.GetRight()))
}
שאלה רביעית
כתוב תכנית המקבלת שורש של עץ בינארי ומחזירה את כמות העלים שיש לעץ.
פתרון בשפת java
public static int leafCounter (BinNode<Integer> t)
{
if ( t==null )
return 0;
if ( !t.hasLeft() && !t.hasRight() )
return 1;
return leafCounter(t.getLeft()) + leafCounter(t.getRight()) ;
}
מהו גובהו המקסימלי של עץ בעל N צמתים? התשובה: N-1
ומהו גובהו המינימלי של עץ בעל N צמתים? LogN בבסיס 2. (שתיים בחזקת מה ייתן N).
מספר העלים של הפעם הקודמת צריך להיות גדול פי שתיים על מנת שהגובה יגדל).
כתבו פעולה המקבלת עץ בינארי המכיל בעלי העץ גורמים ראשוניים (מספרים שבהם שורש העץ מתחלק ללא שארית) של שורש העץ. באחד מהצמתים נפלה שגיאה ויש בו מספר שגוי מאחת שתי הסיבות- או שהמספר איננו ראשוני או שהמספר איננו גורם של המספר הנמצא בשורש העץ. כתבו פעולה המקבלת מצביע לשורש העץ, הפעולה תחזיר את המספר השגוי.?/
פתרון ב C#
public static bool IsPrime(int n)
{
if( n==1 || n==2)
return true;
for(int i=2; i<n/2 ; i++)
{
if(n%i==0)
return false;
}
return true;
}