עבור לתוכן

עץ חיפוש בינארי

Featured Replies

פורסם

אני זקוק נואשות לעזרה.. יש לי את הקובץ עץ בינארי הזה שאני אמור להוסיף לו 5 פונקציה ואני דיי אבוד שם....

אני ישמח לקבל איזה עזרה..



// tree node
public class BinarySearchTree {
// tree root
private BSTNode root;

private class BSTNode {
private Object data;
private BSTNode left;
private BSTNode right;
BSTNode(Object newdata) {
data = newdata;
}
public String toString(){
return "data: "+data+" ";
}
}

// compare two objects (integer type)
private static int compare(Object o1, Object o2) {
int ans = 0;
int n1 = ((Number)o1).intValue();
int n2 = ((Number)o2).intValue();
if(n1>n2) ans = 1;
else if(n1<n2) ans = -1;
return ans;
}

public String getRoot(){
return root.toString();
}
// insert element to the tree
public void insert(Object elem) {
root = insert(root, elem);

}
BSTNode insert(BSTNode tree, Object elem) {
int count=0;
if (tree == null) {

return new BSTNode(elem);


}
if (compare(elem, tree.data) < 0) {
tree.left = insert(tree.left, elem);

return tree;

}
else{
tree.right = insert(tree.right, elem);

return tree;
}
}

// search for element elem
public boolean find(Object elem) {
return find(root,elem);
}
boolean find(BSTNode tree, Object elem) {
if (tree == null)
return false;
if (compare(elem, tree.data) == 0)
return true;
if (compare(elem, tree.data) < 0)
return find(tree.left, elem);
else
return find(tree.right, elem);
}

// print all tree nodes
public void print() {
print(root);
System.out.println();
}
void print(BSTNode tree) {
if (tree != null) {
print(tree.left);
System.out.print(tree.data+",");
print(tree.right);
}
}

// delete emement elem from the tree
public void delete(Object elem) {
root = delete(root, elem);
}
BSTNode delete(BSTNode tree, Object elem) {
if (tree == null)
return null;
if (compare(elem, tree.data) == 0) {
if (tree.left == null)
return tree.right;
else if (tree.right == null)
return tree.left;
else {
if (tree.right.left == null) {
tree.data = tree.right.data;
tree.right = tree.right.right;
return tree;
}
else {
tree.data = removeSmallest(tree.right);
return tree;
}
}
}
else if (compare(elem, tree.data) < 0) {
tree.left = delete(tree.left, elem);
return tree;
}
else {
tree.right = delete(tree.right, elem);
return tree;
}
}
// function removeSmallest is used from function delete
// to remove the smallest element of the tree
Object removeSmallest(BSTNode tree) {
if (tree.left.left == null) {
Object smallest = tree.left.data;
tree.left = tree.left.right;
return smallest;
}
else {
return removeSmallest(tree.left);
}
}


public Object minimum() {


}
public Object maximum(){


}

public int size(){






}
public boolean isEmpty(){
return this.getRoot() == null;
}


public Object findNearestSmall(Object elem){

}
public Object findNearestGrate(Object elem){

}

פורסם

ערוך את ההודעה שלך ושים את הקוד בתוך טג קוד, כדי שיראה נורמלי.

פורסם

minimum:

טרברסל על העץ (לא משנה סוג הטרברסל) ומציאת האיבר המינימלי תוך כדי.

maximum:

טרברסל על העץ (לא משנה סוג הטרברסל) ומציאת האיבר המקסימלי תוך כדי.

size:

טרברסל על העץ (לא משנה סוג הטרברסל) וספירת הצמתים תוך כדי.

findNearestSmall :

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

findNearestGrate:

שליפת תת העץ הימני היוצא מהצומת שקיבלנו כפרמטר מהפונקציה , יש לעשות טרברסל מכל סוג על תת עץ זה ולהחזיר את האיבר הקטן ביותר.

אם אתה לא יודע מה זה טרברסל , כנס לפה : http://en.wikipedia.org/wiki/Tree_traversal

אם אתה לא מסוגל להבין מה כתוב בלינק שנתתי לך , פרוש מתכנות ותלך לעשות משהו אחר שאתה כן טוב בו וכן יכול להתפתח בו.

שמח אם עזרתי,

יוסי.

פורסם

לפרוש מתכנות, קצת הגזמת הייתי אומר, במיוחד כאשר בשביל למצוא את הבן ה MAX, לא צריך לעבור על כל העץ, אלה רק לימני ביותר ( ללכת לבן הימני עד שמגיע לקודקוד שכבר אין לו בן ימני ). כנל עבור MIN, רק שצריך ללכת שמאלה.

גם בשביל שני ה FIND לא צריך לעבור על תתי עצים, אלה רק להחזיר את הבן הימני / שמאלי / אב בהתאם.

בקיצור, יש הבדל בין עץ בינארי, לעץ חיפוש בינארי.

פורסם

לפרוש מתכנות, קצת הגזמת הייתי אומר, במיוחד כאשר בשביל למצוא את הבן ה MAX, לא צריך לעבור על כל העץ, אלה רק לימני ביותר ( ללכת לבן הימני עד שמגיע לקודקוד שכבר אין לו בן ימני ). כנל עבור MIN, רק שצריך ללכת שמאלה.

גם בשביל שני ה FIND לא צריך לעבור על תתי עצים, אלה רק להחזיר את הבן הימני / שמאלי / אב בהתאם.

בקיצור, יש הבדל בין עץ בינארי, לעץ חיפוש בינארי.

וואו , חשבת כמה שניות יותר ממני והראית לי שיש פתרונות יעילים יותר , מה ניסית להוכיח? כתבתי את הפתרונות שלי בצורה פשטנית בכוונה רק בשביל לא לסבך אותו יותר מידי , מה נדמה לך שאני לא מודע לכך שהפתרונות שלי לא מדויקים או לא יעילים?

נ.ב. : (ולא בנימה צינית) מצטער אם העלבתי מישהו בכך שאמרתי : פרוש מתכנות .

ארכיון

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

דיונים חדשים