עמוד ראשי מירק סקריפטינג סניפטים binary tree BY Vendetta

binary tree BY Vendetta

mIRC Snippets - בפורום זה יפורסמו קודים שימושיים למירק. לפרסום קודים יש לפרסמם תחילה בפורום "פרסום קודים ומדריכים" ולאחר מכאן הם יועברו לפורום זה.

vendetta
משתמש רשום
binary tree BY Vendetta
הצטרף: 30 יוני 2010, 18:18
הודעות: 75
פורסם: 28 יוני 2011, 09:30
שם הקוד: binary tree
יוצר: Vendetta
גירסא: 1.0
תיאור: יציג של עץ בינרי במירק
הפעלה:
var %x = $binTree(<TEXT>,[BinTreeInleft],[BinTreeInRight])
setlefttree <BinTree> <BinTreeInleft>
setRighttree <BinTree> <BinTreeInRight>
echo -a @ $getFromTree(<BinTree>)
echo -a @ $getFromTree(<BinTree>).info
echo -a @ $getFromTree(<BinTree>).left
echo -a @ $getFromTree(<BinTree>).right


שורה הראשונה - הגדרת משתנה מסוג עץ בינרי
שורה שנייה - הגדרת העץ בבן השמאלי
שורה שלישית - הגדרת העץ בבן שימיני
שורה רביעית/חמישית - החזרת הערך שנימצא באותו עץ
שורה שישית/שביעית - החזרת העץ הימיני/שאמלי

הקוד-
alias binTree {
  if ($1) {
    var %a = $r(1,99999)
    hadd -m binTree- $+ %a I $1
    if ($2)  {
      hadd -m binTree- $+ %a L $1
      if ($3)  {
        hadd -m binTree- $+ %a R $1
      }
      else hadd -m binTree- $+ %a R $Null
    }
    else hadd -m binTree- $+ %a L $Null
    return %a
  }
}
alias setlefttree {
  if ($hget(binTree- $+ $1)) && ($2) hadd -m binTree- $+ $1 L $2
}
alias setRighttree {
  if ($hget(binTree- $+ $1,I)) && ($2) hadd -m binTree- $+ $1 R $2
}
alias getFromTree {
  if ($hget(binTree- $+ $1,I)) {
    if ($prop = Info) return $hget(binTree- $+ $1,I)
    if ($prop = Left) return $hget(binTree- $+ $1,L)
    if ($prop = Right) return $hget(binTree- $+ $1,R)
    return $hget(binTree- $+ $1,I)
  }
}


וכמובן דוגמה -
מבנה העץ שיצרתי
1---------------------------lol
2----------lol.1.1                     lol.1.2
3-----NULL         lol.2.1        NULL        lol.2.2
4--NULL  NULL  lol.3.1  NULL  NULL   NULL  NULL    lol.3.2


יצירת העץ -
alias checktree {
  var %x = $binTree(lol)

  var %y1 = $binTree(lol.1.1)
  var %y2 = $binTree(lol.1.2)

  var %z1 = $binTree(lol.2.1)
  var %z2 = $binTree(lol.2.2)

  var %d1 = $binTree(lol.3.1)
  var %d2 = $binTree(lol.3.2)

  setlefttree %x %y1
  setRighttree %x %y2

  setRighttree %y1 %z1
  setRighttree %y2 %z2

  setlefttree %y1 %d1
  setRighttree %y2 %d2
}


הכמובן - רקורסייה להצגת כל הערכים בעץ
alias FondTheLastLevel {
  if ($getFromTree($1)) {
    echo -a @ $getFromTree($1).info
    .timer 1 0 FondTheLastLevel $getFromTree($1).left
    .timer 1 0 FondTheLastLevel $getFromTree($1).right
  }
}


כל הקוד ביחד -
1---------------------------lol
2----------lol.1.1                     lol.1.2
3-----NULL         lol.2.1        NULL        lol.2.2
4--NULL  NULL  lol.3.1  NULL  NULL   NULL  NULL    lol.3.2

alias checktree {
  var %x = $binTree(lol)

  var %y1 = $binTree(lol.1.1)
  var %y2 = $binTree(lol.1.2)

  var %z1 = $binTree(lol.2.1)
  var %z2 = $binTree(lol.2.2)

  var %d1 = $binTree(lol.3.1)
  var %d2 = $binTree(lol.3.2)

  setlefttree %x %y1
  setRighttree %x %y2

  setRighttree %y1 %z1
  setRighttree %y2 %z2

  setlefttree %y1 %d1
  setRighttree %y2 %d2

  FondTheLastLevel %x
}
alias FondTheLastLevel {
  if ($getFromTree($1)) {
    echo -a @ $getFromTree($1).info
    .timer 1 0 FondTheLastLevel $getFromTree($1).left
    .timer 1 0 FondTheLastLevel $getFromTree($1).right
  }
}
In the name of God, impure souls of the living dead shall be banished into eternal damnation
Amen
תמונה
אפשר למצוא אותי בערוץ החברים שלי בקווקנט tomer2k#

חזור אל סניפטים