Нужно придумать условие для удаления узлов дерева. Условие - студенты 3-го курса, которые родились летом. Реализацию удаления узлов я сделал, понимаю как сделать чтобы в условие у меня проверялось на какие студенты на 3 курсе, но не могу понять как реализовать 2ю часть условия - студенты родились летом. Кого интересует, почему резко поменял условие из предыдущих тем, потому что немного ошибся с вариантом задания. В программе за комментировал те моменты, которые меня интересуют. Помогите пожалуйста реализовать. Выкладываю свой код. Код | package btree; import java.io.*;
public class BinaryTree { public Node root; public BinaryTree()
{ root = null; }
public void insert(int data, String name, String surname, String course, String ticket, String dateofbirth){
Node n = new Node(data, name, surname, course, ticket, dateofbirth); if (root == null){ root = n; } else { Node current = root; Node parent; while(true) { parent = current; if(data < current.data){ current = current.left; } if (current == null) { parent.left = n; return; } else { current = current.right; if(current == null){ parent.right = n; return;
} } } } }
public Node find(int key){ Node current = root;
while(current.data != key){ if(key < current.data){ current = current.left; } else { current = current.right; }
if(current == null) { return null; }
} return current; } public void inorderPrint(Node root) { if (root == null) { inorderPrint(root.left); System.out.println(root.data + ""); inorderPrint(root.right);
} }
public boolean delete(int key) { //метод удаления узлов Node current = root; Node parent = root; boolean isLeft = true;
if (current.course == "3" && current.dateofbirth == "") { // мое кривое условие удаления студентов 3-го курса, которые родились летом while(current.data != key) { parent = current; if(key < current.data) { isLeft = true; current = current.left; } else { if(current == null) { return false; } } }
if(current.left == null && current.right == null) { if (current == root) root = null;
else if(isLeft) parent.left = null; else parent.right = null;
}
else if (current.right == null) if( current == root) root = current.left; else if(isLeft) parent.left = current.left; else parent.right = current.right;
else if(current.left == null) if(current == root) root = current.right; else if(isLeft) parent.left = current.right; else parent.right = current.right;
else { Node successor = getSuccessor(current);
if(current == root) root = successor; else if(isLeft) parent.left = successor; else parent.right = successor;
successor.left = current.left;
} }
return true;
}
private Node getSuccessor(Node delNode) { Node successorParent = delNode; Node successor = delNode; Node current = delNode.right; while(current != null) { successorParent = successor; successor = current; current = current.left; }
if(successor != delNode.right) { successorParent.left = successor.right; successor.right = delNode.right; } return successor; }
public void traverseOut() { System.out.println("последовательный обход:"); inorderPrint(root); }
}
class bTreeApp { public static void main(String[] args ) { BinaryTree theTree = new BinaryTree();
theTree.insert(1, "vasa", "pupkin", "3", "456987", "07.07.1991"); theTree.insert(2, "ivan", "ivanov", "2", "789898", "09.04.1992"); theTree.insert(4, "dima", "vengel", "3", "7896546", "09.06.1991");
System.out.println("Список студентов:");
}
}
class Node { Node left; Node right; int data; String name; String surname; String course; String ticket; String dateofbirth; public Node(int data, String name, String surname, String course, String ticket, String dateofbirth){ this.data = data; this.name = name; this.surname = surname; this.course = course; this.ticket = ticket; this.dateofbirth = dateofbirth; } public void displayNode() { System.out.println("--"); System.out.print(data); System.out.print("Фамилия"); System.out.println(surname); System.out.print("Имя"); System.out.println(name); System.out.print("Курс"); System.out.println(course); System.out.print("Билет"); System.out.println(ticket); System.out.print("Дата рождения"); System.out.println(dateofbirth); System.out.println("--"); } }
|
Это сообщение отредактировал(а) ArniLand - 23.9.2010, 19:53
|