Tree String Java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package treestring;

public class TreeString {
    class node{
        String data;
        node left;
        node right;
        node(String x){
            this.data=x;
        }
    }
   
    private node akar;
   
    private boolean iskosong(){
        return (akar == null);
    }
   
    private static int treeCount=0;
    public static void addCounter(){
        treeCount+=1;
    }
   
    public static void decreaseCounter(){
        treeCount-=1;
    }
   
    public static int getRecordCount(){
        return treeCount;
    }
   
    public void insert(String input){
        node baru = new node(input);
        TreeString.addCounter();
        if(iskosong())
            akar = baru;
        else {
            node cursor=akar,
                parent=null;
            while (cursor!=null){
                parent = cursor;
                if(input.compareTo(cursor.data)<0)
                    cursor = cursor.left;
                else
                    cursor = cursor.right;
            }if(input.compareTo(parent.data)<0){
                parent.left=baru;
                return;
            }else{
                parent.right=baru;
                return;
            }
       }
    }
   
    public boolean find(String target){
        node cursor=akar;
        boolean ketemu=false;
        while (cursor!=null){
            if(cursor.data.equals(target)){
                ketemu=true;
                System.out.println("Data Ditemukan\n");
                break;
            }else if(target.compareTo(cursor.data)<0)
                cursor=cursor.left;
            else
                cursor=cursor.right;
        }return ketemu;
    }
   
    public void preorder (node root){
        if(root==null)return;
        System.out.print(root.data+" ");
        preorder(root.left);
        preorder(root.right);
    }
   
    private void inorder(node dakar){
        if(dakar==null)return;
        inorder(dakar.left);
        System.out.print(dakar.data+" ");
        inorder(dakar.right);
    }
   
    private void postorder(node dakar){
        if(dakar == null)return;
        postorder(dakar.left);
        postorder(dakar.right);
        System.out.print(dakar.data+" ");
    }
   
    public void delete(String target){
        node x; node cursor;
        node y; node parent;
        if(!find(target))
            System.out.print("Data Tidak ada!! \n");
        else{
            TreeString.decreaseCounter();
            cursor=akar;
            parent=null;
            while(cursor!=null){
                parent=cursor;
                if(target.compareTo(cursor.data)<0){
                    cursor=cursor.left;
                    if(cursor.data.equals(target))break;
                }else if(target.compareTo(cursor.data)>0 ){
                    cursor=cursor.right;
                    if(cursor.data.equals(target))break;
                }else if(target.equals(cursor.data)){
                    break;/*untuk metode hapus akar*/
                }//jika target ada pada cursor==akar
            }//untuk cursor.data== target==akar.data
            if(cursor==akar){
            if(cursor.right==null)
                akar=akar.left;
            else
                if((cursor.right==null)&&(cursor.left==null))
                    akar=null;
                else { //kalau akar.right ada dan (akar.left bisa ada atau sama dengan null)
                    x=cursor.right;
                    //y=cursor.right;
                    while(x.left!=null)
                        x.left=cursor.left;
                    akar=akar.right;
                } 
            }
        //untuk yg cursor !=akar
            else{
                if((cursor.left==null)&&(cursor.right==null)){//kalau yg ditemukan ada di child paling bawah
                    if(target.compareTo(parent.data)<0)
                        parent.left=null;
                    else parent.right=null;
                }else
                    if((cursor.right!=null)&&((cursor.left!=null)||(cursor.left==null))){
                        x=cursor.right;
                        y=cursor.right;
                        while(x.left!=null)
                            x=x.left;
                            x.left=cursor.left;
                            if(y.data.compareTo(parent.data)<0)parent.left=y;
                            else parent.right=y;
                    }else
                        if((cursor.right==null)&&(cursor.left!=null)){
                            x=cursor.left;
                            if(x.data.compareTo(parent.data)<0)parent.left=x;
                            else parent.right=x;
                        }
                }//lokasi data dihapus tidak di posisi akar
        }
    }
   
    /*
     * Method traverse untuk mengelilingi node-node dalam tree
     */
    public void traverse(int tipe){
        switch(tipe){
            case 1:
                System.out.print("\nPreorder traversal : ");
                preorder(akar);
                break;
            case 2:
                System.out.print("\nInorder traversal : ");
                inorder(akar);
                break;
            case 3:
                System.out.print("\nPostorder traversal : ");
                postorder(akar);
                break;
        }//System.out.println("\n");
    }