Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void remove(E elem) {
- System.out.println("Remove: ");
- if(root == null) return;
- if(elem == null) return;
- if(!contains(elem)){
- return;
- }
- Node<E> parent = null;
- Node<E> z = root;
- while(!(elem.equal(z.contents))){
- parent = z;
- if(elem.lessOrEqual(z.contents)){
- z = z.left;
- }else{
- z = z.right;
- }
- }
- if(z.left == null && z.right == null){ //uzel nema potomky
- if(parent == null){
- root = null;
- return;
- }
- if(parent.left!=null){
- if(parent.left.equals(z)){
- parent.left = null;
- return;
- }
- }
- if(parent.right!=null){
- if(parent.right.equals(z)){
- parent.right = null;
- return;
- }
- }
- }
- if((z.left!= null && z.right == null)||(z.left == null && z.right != null)){ //uzel ma jen jednoho potomka
- if(z.right == null){
- z.left.setParent(parent);
- if(parent == null){
- z.left = root;
- return;
- }
- if(parent.left!=null){
- if(parent.left.equals(z)){
- parent.left = z.left;
- return;
- }
- }
- if(parent.right!=null){
- if(parent.right.equals(z)){
- parent.right = z.left;
- return;
- }
- }
- }else{
- z.right.setParent(parent);
- if(parent == null){
- z.right = root;
- return;
- }
- if(parent.left!=null){
- if(parent.left.equals(z)){
- parent.left = z.right;
- return;
- }
- }
- if(parent.right!=null){
- if(parent.right.equals(z)){
- parent.right = z.right;
- return;
- }
- }
- }
- }
- if(z.left != null && z.right != null){ //mazany uzel ma oba potomky
- Node<E> maxPar = z;
- //Node<E> help4 = z;
- Node<E> max;
- max = z.left;
- while(max.right != null){
- max = max.right;
- }
- if(z.left.equals(max)){ //maximum leveho podstromu z je hned z.left
- max.right = z.right;
- z.right.setParent(max);
- max.setParent(parent);
- if(parent == null){
- root = max;
- return;
- }
- if(parent.left!=null){
- if(parent.left.equals(z)){
- parent.left = max;
- return;
- }
- }
- if(parent.right!=null){
- if(parent.right.equals(z)){
- parent.right = max;
- return;
- }
- }
- return;
- }else{ //maximum leveho podstromu je az nekde na z.left.right..right
- maxPar = maxPar.left;
- while(maxPar.right.right != null){
- maxPar = maxPar.right;
- }
- z.left.setParent(max);
- z.right.setParent(max);
- max.setParent(parent);
- if(max.left != null){
- max.left.setParent(maxPar);
- }
- maxPar.right = max.left;
- max.left = z.left;
- max.right = z.right;
- if(parent == null){
- root = max;
- return;
- }
- if(parent.left!=null){
- if(parent.left.equals(z)){
- parent.left = max;
- return;
- }
- }
- if(parent.right!=null){
- if(parent.right.equals(z)){
- parent.right = max;
- return;
- }
- }
- }
- }
- }
Add Comment
Please, Sign In to add comment