Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public int remove(C key) {
- SearchTreeNode t = root;
- SearchTreeNode parent = null;
- while (t != null) {
- int res = key.compareTo((C) t.key);
- if (res < 0) {
- parent = t;
- t = t.left;
- } else if (res > 0) {
- parent = t;
- t = t.right;
- } else { // res == 0, gefunden
- deleteNode(parent, t);
- countRemoved++;
- remove(key);
- break;
- }
- }
- return countRemoved;
- }
- /**
- *
- * @param parent
- * @param t
- * @return boolean;
- *
- * Siehe Folien
- *
- */
- public boolean deleteNode(SearchTreeNode parent, SearchTreeNode t) {
- if (t.left == null) {
- if (t.right == null) { // Blatt
- if (parent == null) { // einelementig
- root = null;
- } else { // normaler Blattknoten
- if (parent.left == t) {
- parent.left = null;
- } else { // parent.right == t
- parent.right = null;
- }
- }
- } else { // nur linke Seite leer
- SearchTreeNode r = t.right; // rechten Nachfolger...
- t.left = r.left; // ... in t kopieren
- t.key = r.key;
- t.data = r.data;
- t.right = r.right;
- }
- } else if (t.right == null) { // nur rechte Seite leer
- SearchTreeNode l = t.left; // linken Nachfolger
- t.left = l.left; // ... in t kopieren
- t.key = l.key;
- t.data = l.data;
- t.right = l.right;
- } else { // zwei Kinder
- if (t.left.right == null) {
- t.key = t.left.key;
- t.data = t.left.data;
- t.left = t.left.left;
- } else {
- SearchTreeNode maxl = t.left;
- while (maxl.right.right != null) {
- maxl = maxl.right;
- }
- t.key = maxl.right.key;
- t.data = maxl.right.data;
- maxl.right = maxl.right.left;
- }
- }
- size--;
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement